diff options
author | Douglas Gregor <dgregor@apple.com> | 2010-04-16 06:31:05 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2010-04-16 06:31:05 +0000 |
commit | 66791df8d8b65c68de9ecf3246e895919af75bc2 (patch) | |
tree | 044620697110ce2e5f85173df2d9d2d8173b6114 | |
parent | ce2b41dab3378750a79db518ab3ba8a5c8f39457 (diff) |
Only predefine the macro _GNU_SOURCE in C++ mode when we're on a
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
-rw-r--r-- | lib/Frontend/InitPreprocessor.cpp | 26 | ||||
-rw-r--r-- | test/Preprocessor/init.c | 6 |
2 files changed, 27 insertions, 5 deletions
diff --git a/lib/Frontend/InitPreprocessor.cpp b/lib/Frontend/InitPreprocessor.cpp index 8bcd3a83c0..aacae49540 100644 --- a/lib/Frontend/InitPreprocessor.cpp +++ b/lib/Frontend/InitPreprocessor.cpp @@ -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) { diff --git a/test/Preprocessor/init.c b/test/Preprocessor/init.c index cccee762e2..4ef460bbc6 100644 --- a/test/Preprocessor/init.c +++ b/test/Preprocessor/init.c @@ -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 @@ -1028,3 +1025,6 @@ // 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 +// |