// if the /OPT:REF linker option is used. We defined a macro as this is a\r
// a non standard extension\r
//\r
-#if defined(_MSC_EXTENSIONS) && _MSC_VER < 1800 && !defined (MDE_CPU_EBC)\r
+#if defined(_MSC_VER) && _MSC_VER < 1800 && !defined (MDE_CPU_EBC)\r
///\r
/// Remove global variable from the linked image if there are no references to\r
/// it after all compiler and linker optimizations have been performed.\r
///\r
#define ASM_PFX(name) _CONCATENATE (__USER_LABEL_PREFIX__, name)\r
\r
-#if __APPLE__\r
+#ifdef __APPLE__\r
//\r
// Apple extension that is used by the linker to optimize code size\r
// with assembly functions. Put at the end of your .S files\r
#define VA_END(Marker) (Marker = (VA_LIST) 0)\r
#define VA_COPY(Dest, Start) ((void)((Dest) = (Start)))\r
\r
-#elif defined(__GNUC__)\r
+#elif defined(__GNUC__) || defined(__clang__)\r
\r
#if defined(MDE_CPU_X64) && !defined(NO_MSABI_VA_FUNCS)\r
//\r
@return Offset, in bytes, of field.\r
\r
**/\r
-#ifdef __GNUC__\r
-#if __GNUC__ >= 4\r
+#if (defined(__GNUC__) && __GNUC__ >= 4) || defined(__clang__)\r
#define OFFSET_OF(TYPE, Field) ((UINTN) __builtin_offsetof(TYPE, Field))\r
#endif\r
-#endif\r
\r
#ifndef OFFSET_OF\r
#define OFFSET_OF(TYPE, Field) ((UINTN) &(((TYPE *)0)->Field))\r
**/\r
#ifdef MDE_CPU_EBC\r
#define STATIC_ASSERT(Expression, Message)\r
-#elif _MSC_EXTENSIONS\r
+#elif defined(_MSC_EXTENSIONS)\r
#define STATIC_ASSERT static_assert\r
#else\r
#define STATIC_ASSERT _Static_assert\r
\r
**/\r
#define RETURN_ADDRESS(L) ((L == 0) ? _ReturnAddress() : (VOID *) 0)\r
-#elif defined(__GNUC__)\r
+#elif defined (__GNUC__) || defined (__clang__)\r
void * __builtin_return_address (unsigned int level);\r
/**\r
Get the return address of the calling function.\r