]> granicus.if.org Git - clang/commitdiff
Sink the strange '-stdlib=...' flag handling into the C++ include
authorChandler Carruth <chandlerc@gmail.com>
Fri, 4 Nov 2011 07:43:33 +0000 (07:43 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Fri, 4 Nov 2011 07:43:33 +0000 (07:43 +0000)
handling logic of the generic ToolChain. This flag, despite its name,
has *nothing* to do with the GCC flag '-nostdlib' that relates
(exclusively) to the linking behavior. It is a most unfortunate name in
that regard...

It is used to tell InitHeaderSearch.cpp *which* set of C++ standard
library header search paths to use -- those for libstdc++ from GCC's
installation, or those from a libc++ installation. As this logic is
hoisted out of the Frontend, and into the Driver as part of this
ToolChain, the generic method will be overridden for the platform, where
it can implement this logic directly. As such, hiding the CC1 option
passing in the generic space is a natural fit despite the odd naming.

Also, expand on the comments to clarify whats going on, and tidy up the
Tools.cpp code now that its simpler.

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

lib/Driver/ToolChain.cpp
lib/Driver/Tools.cpp

index 11deed1588c62f8d6615b3506864f60d7e5e4da3..5418436315d9035a1457298bc07363e51baf962b 100644 (file)
@@ -232,7 +232,16 @@ ToolChain::CXXStdlibType ToolChain::GetCXXStdlibType(const ArgList &Args) const{
 
 void ToolChain::AddClangCXXStdlibIncludeArgs(const ArgList &Args,
                                              ArgStringList &CmdArgs) const {
-  // Header search paths are handled by each of the subclasses.
+  // Header search paths should be handled by each of the subclasses.
+  // Historically, they have not been, and instead have been handled inside of
+  // the CC1-layer frontend. As the logic is hoisted out, this generic function
+  // will slowly stop being called.
+  //
+  // While it is being called, replicate a bit of a hack to propagate the
+  // '-stdlib=' flag down to CC1 so that it can in turn customize the C++
+  // header search paths with it. Once all systems are overriding this
+  // function, the CC1 flag and this line can be removed.
+  Args.AddAllArgs(CmdArgs, options::OPT_stdlib_EQ);
 }
 
 void ToolChain::AddCXXStdlibLibArgs(const ArgList &Args,
index 47521c41a210c50a607ca9b51dfb58a7edf59a5c..4f84d0a0dd218a04143ca8e21566a30166bb6a71 100644 (file)
@@ -425,11 +425,8 @@ void Clang::AddPreprocessingOptions(const Driver &D,
   getToolChain().AddClangSystemIncludeArgs(Args, CmdArgs);
 
   // Add C++ include arguments, if needed.
-  types::ID InputType = Inputs[0].getType();
-  if (types::isCXX(InputType)) {
+  if (types::isCXX(Inputs[0].getType()))
     getToolChain().AddClangCXXStdlibIncludeArgs(Args, CmdArgs);
-    Args.AddAllArgs(CmdArgs, options::OPT_stdlib_EQ);
-  }
 }
 
 /// getARMTargetCPU - Get the (LLVM) name of the ARM cpu we are targeting.