]> granicus.if.org Git - clang/commitdiff
Only predefine the macro _GNU_SOURCE in C++ mode when we're on a
authorDouglas Gregor <dgregor@apple.com>
Fri, 16 Apr 2010 06:31:05 +0000 (06:31 +0000)
committerDouglas Gregor <dgregor@apple.com>
Fri, 16 Apr 2010 06:31:05 +0000 (06:31 +0000)
platform that typically uses glibc. Fixes a Boost.Thread compilation
failure.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101450 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/InitPreprocessor.cpp
test/Preprocessor/init.c

index 8bcd3a83c00e65a62a817d06bc1c1650dac69cc2..aacae495401ca4d7da237f7bd4e1f9b3fe41243b 100644 (file)
@@ -294,8 +294,30 @@ static void InitializePredefinedMacros(const TargetInfo &TI,
       //   C++ translation unit.
       Builder.defineMacro("__cplusplus", "199711L");
     Builder.defineMacro("__private_extern__", "extern");
-    // Ugly hack to work with GNU libstdc++.
-    Builder.defineMacro("_GNU_SOURCE");
+
+    // Define _GNU_SOURCE on platforms where we expect to use glibc.
+    switch (TI.getTriple().getOS()) {
+    case llvm::Triple::Cygwin:
+    case llvm::Triple::MinGW64:
+    case llvm::Triple::MinGW32:
+    case llvm::Triple::Linux:
+    case llvm::Triple::Solaris:
+    case llvm::Triple::AuroraUX:
+      Builder.defineMacro("_GNU_SOURCE");
+      break;
+
+    case llvm::Triple::Darwin:
+    case llvm::Triple::DragonFly:
+    case llvm::Triple::FreeBSD:
+    case llvm::Triple::UnknownOS:
+    case llvm::Triple::Lv2:
+    case llvm::Triple::NetBSD:
+    case llvm::Triple::OpenBSD:
+    case llvm::Triple::Psp:
+    case llvm::Triple::Win32:
+    case llvm::Triple::Haiku:
+      break;
+    }
   }
 
   if (LangOpts.Microsoft) {
index cccee762e264b7119f95b8d195de8f83e3f9a0e3..4ef460bbc6e400fa6557110736552bbe6fc459af 100644 (file)
@@ -11,7 +11,6 @@
 // 
 // RUN: %clang_cc1 -x c++ -std=c++0x -E -dM < /dev/null | FileCheck -check-prefix CXX0X %s
 //
-// CXX0X:#define _GNU_SOURCE 1
 // CXX0X:#define __DEPRECATED 1
 // CXX0X:#define __GNUG__
 // CXX0X:#define __GXX_EXPERIMENTAL_CXX0X__ 1
@@ -22,7 +21,6 @@
 // 
 // RUN: %clang_cc1 -x c++ -std=c++98 -E -dM < /dev/null | FileCheck -check-prefix CXX98 %s
 // 
-// CXX98:#define _GNU_SOURCE 1
 // CXX98:#define __DEPRECATED 1
 // CXX98:#define __GNUG__
 // CXX98:#define __GXX_WEAK__ 1
@@ -58,7 +56,6 @@
 // 
 // RUN: %clang_cc1 -x c++ -std=gnu++98 -E -dM < /dev/null | FileCheck -check-prefix GXX98 %s
 //
-// GXX98:#define _GNU_SOURCE 1
 // GXX98:#define __DEPRECATED 1
 // GXX98:#define __GNUG__
 // GXX98:#define __GXX_WEAK__ 1
 // X86_64:#define __x86_64 1
 // X86_64:#define __x86_64__ 1
 //
+// RUN: %clang_cc1 -x c++ -triple i686-pc-linux-gnu -E -dM < /dev/null | FileCheck -check-prefix GNUSOURCE %s
+// GNUSOURCE:#define _GNU_SOURCE 1
+//