On Apr 15, 2010, at 11:31 PM, Douglas Gregor wrote: > Author: dgregor > Date: Fri Apr 16 01:31:05 2010 > New Revision: 101450 > > URL: http://llvm.org/viewvc/llvm-project?rev=101450&view=rev > Log: > 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.
Hey Doug, Should this be sunk into the Targets.cpp file? It seems very similar to __i386__ and such. Switching on triple seems weird. -Chris > > Modified: > cfe/trunk/lib/Frontend/InitPreprocessor.cpp > cfe/trunk/test/Preprocessor/init.c > > Modified: cfe/trunk/lib/Frontend/InitPreprocessor.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitPreprocessor.cpp?rev=101450&r1=101449&r2=101450&view=diff > ============================================================================== > --- cfe/trunk/lib/Frontend/InitPreprocessor.cpp (original) > +++ cfe/trunk/lib/Frontend/InitPreprocessor.cpp Fri Apr 16 01:31:05 2010 > @@ -294,8 +294,30 @@ > // 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) { > > Modified: cfe/trunk/test/Preprocessor/init.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Preprocessor/init.c?rev=101450&r1=101449&r2=101450&view=diff > ============================================================================== > --- cfe/trunk/test/Preprocessor/init.c (original) > +++ cfe/trunk/test/Preprocessor/init.c Fri Apr 16 01:31:05 2010 > @@ -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 > +// > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
