Skip to content

Commit f3a896b

Browse files
committed
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
1 parent cceed09 commit f3a896b

File tree

2 files changed

+47
-30
lines changed

2 files changed

+47
-30
lines changed

clang/lib/Frontend/InitPreprocessor.cpp

Lines changed: 31 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
481481
if (!LangOpts.GNUMode && !LangOpts.MSVCCompat)
482482
Builder.defineMacro("__STRICT_ANSI__");
483483

484-
if (LangOpts.CPlusPlus11)
484+
if (!LangOpts.MSVCCompat && LangOpts.CPlusPlus11)
485485
Builder.defineMacro("__GXX_EXPERIMENTAL_CXX0X__");
486486

487487
if (LangOpts.ObjC1) {
@@ -541,15 +541,15 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
541541

542542
if (!LangOpts.MSVCCompat && LangOpts.CXXExceptions)
543543
Builder.defineMacro("__EXCEPTIONS");
544-
if (LangOpts.RTTI)
544+
if (!LangOpts.MSVCCompat && LangOpts.RTTI)
545545
Builder.defineMacro("__GXX_RTTI");
546546
if (LangOpts.SjLjExceptions)
547547
Builder.defineMacro("__USING_SJLJ_EXCEPTIONS__");
548548

549549
if (LangOpts.Deprecated)
550550
Builder.defineMacro("__DEPRECATED");
551551

552-
if (LangOpts.CPlusPlus) {
552+
if (!LangOpts.MSVCCompat && LangOpts.CPlusPlus) {
553553
Builder.defineMacro("__GNUG__", "4");
554554
Builder.defineMacro("__GXX_WEAK__");
555555
Builder.defineMacro("__private_extern__", "extern");
@@ -746,36 +746,38 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
746746
else
747747
Builder.defineMacro("__FINITE_MATH_ONLY__", "0");
748748

749-
if (LangOpts.GNUInline)
750-
Builder.defineMacro("__GNUC_GNU_INLINE__");
751-
else
752-
Builder.defineMacro("__GNUC_STDC_INLINE__");
749+
if (!LangOpts.MSVCCompat) {
750+
if (LangOpts.GNUInline)
751+
Builder.defineMacro("__GNUC_GNU_INLINE__");
752+
else
753+
Builder.defineMacro("__GNUC_STDC_INLINE__");
753754

754-
// The value written by __atomic_test_and_set.
755-
// FIXME: This is target-dependent.
756-
Builder.defineMacro("__GCC_ATOMIC_TEST_AND_SET_TRUEVAL", "1");
755+
// The value written by __atomic_test_and_set.
756+
// FIXME: This is target-dependent.
757+
Builder.defineMacro("__GCC_ATOMIC_TEST_AND_SET_TRUEVAL", "1");
757758

758-
// Used by libstdc++ to implement ATOMIC_<foo>_LOCK_FREE.
759-
unsigned InlineWidthBits = TI.getMaxAtomicInlineWidth();
759+
// Used by libstdc++ to implement ATOMIC_<foo>_LOCK_FREE.
760+
unsigned InlineWidthBits = TI.getMaxAtomicInlineWidth();
760761
#define DEFINE_LOCK_FREE_MACRO(TYPE, Type) \
761-
Builder.defineMacro("__GCC_ATOMIC_" #TYPE "_LOCK_FREE", \
762-
getLockFreeValue(TI.get##Type##Width(), \
763-
TI.get##Type##Align(), \
764-
InlineWidthBits));
765-
DEFINE_LOCK_FREE_MACRO(BOOL, Bool);
766-
DEFINE_LOCK_FREE_MACRO(CHAR, Char);
767-
DEFINE_LOCK_FREE_MACRO(CHAR16_T, Char16);
768-
DEFINE_LOCK_FREE_MACRO(CHAR32_T, Char32);
769-
DEFINE_LOCK_FREE_MACRO(WCHAR_T, WChar);
770-
DEFINE_LOCK_FREE_MACRO(SHORT, Short);
771-
DEFINE_LOCK_FREE_MACRO(INT, Int);
772-
DEFINE_LOCK_FREE_MACRO(LONG, Long);
773-
DEFINE_LOCK_FREE_MACRO(LLONG, LongLong);
774-
Builder.defineMacro("__GCC_ATOMIC_POINTER_LOCK_FREE",
775-
getLockFreeValue(TI.getPointerWidth(0),
776-
TI.getPointerAlign(0),
777-
InlineWidthBits));
762+
Builder.defineMacro("__GCC_ATOMIC_" #TYPE "_LOCK_FREE", \
763+
getLockFreeValue(TI.get##Type##Width(), \
764+
TI.get##Type##Align(), \
765+
InlineWidthBits));
766+
DEFINE_LOCK_FREE_MACRO(BOOL, Bool);
767+
DEFINE_LOCK_FREE_MACRO(CHAR, Char);
768+
DEFINE_LOCK_FREE_MACRO(CHAR16_T, Char16);
769+
DEFINE_LOCK_FREE_MACRO(CHAR32_T, Char32);
770+
DEFINE_LOCK_FREE_MACRO(WCHAR_T, WChar);
771+
DEFINE_LOCK_FREE_MACRO(SHORT, Short);
772+
DEFINE_LOCK_FREE_MACRO(INT, Int);
773+
DEFINE_LOCK_FREE_MACRO(LONG, Long);
774+
DEFINE_LOCK_FREE_MACRO(LLONG, LongLong);
775+
Builder.defineMacro("__GCC_ATOMIC_POINTER_LOCK_FREE",
776+
getLockFreeValue(TI.getPointerWidth(0),
777+
TI.getPointerAlign(0),
778+
InlineWidthBits));
778779
#undef DEFINE_LOCK_FREE_MACRO
780+
}
779781

780782
if (LangOpts.NoInlineDefine)
781783
Builder.defineMacro("__NO_INLINE__");

clang/test/Preprocessor/predefined-macros.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,23 @@
88
// CHECK-MS: #define _M_IX86 600
99
// CHECK-MS: #define _M_IX86_FP
1010
// CHECK-MS: #define _WIN32 1
11-
// CHECK-MS-NOT: #define __GNUC__
1211
// CHECK-MS-NOT: #define __STRICT_ANSI__
12+
// CHECK-MS-NOT: GCC
13+
// CHECK-MS-NOT: GNU
14+
// CHECK-MS-NOT: GXX
15+
//
16+
// RUN: %clang_cc1 %s -E -dM -triple x86_64-pc-win32 -fms-extensions -fms-compatibility \
17+
// RUN: -fmsc-version=1300 -o - | FileCheck %s --check-prefix=CHECK-MS64
18+
// CHECK-MS64: #define _INTEGRAL_MAX_BITS 64
19+
// CHECK-MS64: #define _MSC_EXTENSIONS 1
20+
// CHECK-MS64: #define _MSC_VER 1300
21+
// CHECK-MS64: #define _M_AMD64 1
22+
// CHECK-MS64: #define _M_X64 1
23+
// CHECK-MS64: #define _WIN64 1
24+
// CHECK-MS64-NOT: #define __STRICT_ANSI__
25+
// CHECK-MS64-NOT: GCC
26+
// CHECK-MS64-NOT: GNU
27+
// CHECK-MS64-NOT: GXX
1328
//
1429
// RUN: %clang_cc1 %s -E -dM -triple i686-pc-win32 -fms-compatibility \
1530
// RUN: -o - | FileCheck %s --check-prefix=CHECK-MS-STDINT

0 commit comments

Comments
 (0)