From: Ehsan Akhgari Date: Thu, 10 Jul 2014 18:44:24 +0000 (+0000) Subject: Avoid definining more GCC specific predefined macros in clang-cl X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f3a896bd22816c054fada3309bd0b460a845e967;p=platform%2Fupstream%2Fllvm.git Avoid definining more GCC specific predefined macros in clang-cl Reviewers: hansw, rnk Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D4419 llvm-svn: 212753 --- diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp index f03348d..1ce4279 100644 --- a/clang/lib/Frontend/InitPreprocessor.cpp +++ b/clang/lib/Frontend/InitPreprocessor.cpp @@ -481,7 +481,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI, if (!LangOpts.GNUMode && !LangOpts.MSVCCompat) Builder.defineMacro("__STRICT_ANSI__"); - if (LangOpts.CPlusPlus11) + if (!LangOpts.MSVCCompat && LangOpts.CPlusPlus11) Builder.defineMacro("__GXX_EXPERIMENTAL_CXX0X__"); if (LangOpts.ObjC1) { @@ -541,7 +541,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI, if (!LangOpts.MSVCCompat && LangOpts.CXXExceptions) Builder.defineMacro("__EXCEPTIONS"); - if (LangOpts.RTTI) + if (!LangOpts.MSVCCompat && LangOpts.RTTI) Builder.defineMacro("__GXX_RTTI"); if (LangOpts.SjLjExceptions) Builder.defineMacro("__USING_SJLJ_EXCEPTIONS__"); @@ -549,7 +549,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI, if (LangOpts.Deprecated) Builder.defineMacro("__DEPRECATED"); - if (LangOpts.CPlusPlus) { + if (!LangOpts.MSVCCompat && LangOpts.CPlusPlus) { Builder.defineMacro("__GNUG__", "4"); Builder.defineMacro("__GXX_WEAK__"); Builder.defineMacro("__private_extern__", "extern"); @@ -746,36 +746,38 @@ static void InitializePredefinedMacros(const TargetInfo &TI, else Builder.defineMacro("__FINITE_MATH_ONLY__", "0"); - if (LangOpts.GNUInline) - Builder.defineMacro("__GNUC_GNU_INLINE__"); - else - Builder.defineMacro("__GNUC_STDC_INLINE__"); + if (!LangOpts.MSVCCompat) { + if (LangOpts.GNUInline) + Builder.defineMacro("__GNUC_GNU_INLINE__"); + else + Builder.defineMacro("__GNUC_STDC_INLINE__"); - // The value written by __atomic_test_and_set. - // FIXME: This is target-dependent. - Builder.defineMacro("__GCC_ATOMIC_TEST_AND_SET_TRUEVAL", "1"); + // The value written by __atomic_test_and_set. + // FIXME: This is target-dependent. + Builder.defineMacro("__GCC_ATOMIC_TEST_AND_SET_TRUEVAL", "1"); - // Used by libstdc++ to implement ATOMIC__LOCK_FREE. - unsigned InlineWidthBits = TI.getMaxAtomicInlineWidth(); + // Used by libstdc++ to implement ATOMIC__LOCK_FREE. + unsigned InlineWidthBits = TI.getMaxAtomicInlineWidth(); #define DEFINE_LOCK_FREE_MACRO(TYPE, Type) \ - Builder.defineMacro("__GCC_ATOMIC_" #TYPE "_LOCK_FREE", \ - getLockFreeValue(TI.get##Type##Width(), \ - TI.get##Type##Align(), \ - InlineWidthBits)); - DEFINE_LOCK_FREE_MACRO(BOOL, Bool); - DEFINE_LOCK_FREE_MACRO(CHAR, Char); - DEFINE_LOCK_FREE_MACRO(CHAR16_T, Char16); - DEFINE_LOCK_FREE_MACRO(CHAR32_T, Char32); - DEFINE_LOCK_FREE_MACRO(WCHAR_T, WChar); - DEFINE_LOCK_FREE_MACRO(SHORT, Short); - DEFINE_LOCK_FREE_MACRO(INT, Int); - DEFINE_LOCK_FREE_MACRO(LONG, Long); - DEFINE_LOCK_FREE_MACRO(LLONG, LongLong); - Builder.defineMacro("__GCC_ATOMIC_POINTER_LOCK_FREE", - getLockFreeValue(TI.getPointerWidth(0), - TI.getPointerAlign(0), - InlineWidthBits)); + Builder.defineMacro("__GCC_ATOMIC_" #TYPE "_LOCK_FREE", \ + getLockFreeValue(TI.get##Type##Width(), \ + TI.get##Type##Align(), \ + InlineWidthBits)); + DEFINE_LOCK_FREE_MACRO(BOOL, Bool); + DEFINE_LOCK_FREE_MACRO(CHAR, Char); + DEFINE_LOCK_FREE_MACRO(CHAR16_T, Char16); + DEFINE_LOCK_FREE_MACRO(CHAR32_T, Char32); + DEFINE_LOCK_FREE_MACRO(WCHAR_T, WChar); + DEFINE_LOCK_FREE_MACRO(SHORT, Short); + DEFINE_LOCK_FREE_MACRO(INT, Int); + DEFINE_LOCK_FREE_MACRO(LONG, Long); + DEFINE_LOCK_FREE_MACRO(LLONG, LongLong); + Builder.defineMacro("__GCC_ATOMIC_POINTER_LOCK_FREE", + getLockFreeValue(TI.getPointerWidth(0), + TI.getPointerAlign(0), + InlineWidthBits)); #undef DEFINE_LOCK_FREE_MACRO + } if (LangOpts.NoInlineDefine) Builder.defineMacro("__NO_INLINE__"); diff --git a/clang/test/Preprocessor/predefined-macros.c b/clang/test/Preprocessor/predefined-macros.c index 3e0b8a0..7f59823 100644 --- a/clang/test/Preprocessor/predefined-macros.c +++ b/clang/test/Preprocessor/predefined-macros.c @@ -8,8 +8,23 @@ // CHECK-MS: #define _M_IX86 600 // CHECK-MS: #define _M_IX86_FP // CHECK-MS: #define _WIN32 1 -// CHECK-MS-NOT: #define __GNUC__ // CHECK-MS-NOT: #define __STRICT_ANSI__ +// CHECK-MS-NOT: GCC +// CHECK-MS-NOT: GNU +// CHECK-MS-NOT: GXX +// +// RUN: %clang_cc1 %s -E -dM -triple x86_64-pc-win32 -fms-extensions -fms-compatibility \ +// RUN: -fmsc-version=1300 -o - | FileCheck %s --check-prefix=CHECK-MS64 +// CHECK-MS64: #define _INTEGRAL_MAX_BITS 64 +// CHECK-MS64: #define _MSC_EXTENSIONS 1 +// CHECK-MS64: #define _MSC_VER 1300 +// CHECK-MS64: #define _M_AMD64 1 +// CHECK-MS64: #define _M_X64 1 +// CHECK-MS64: #define _WIN64 1 +// CHECK-MS64-NOT: #define __STRICT_ANSI__ +// CHECK-MS64-NOT: GCC +// CHECK-MS64-NOT: GNU +// CHECK-MS64-NOT: GXX // // RUN: %clang_cc1 %s -E -dM -triple i686-pc-win32 -fms-compatibility \ // RUN: -o - | FileCheck %s --check-prefix=CHECK-MS-STDINT