[cfe-commits] r111979 - in /cfe/trunk: include/clang/Frontend/HeaderSearchOptions.h lib/Frontend/CompilerInvocation.cpp lib/Frontend/InitHeaderSearch.cpp

Chris Lattner sabre at nondot.org
Tue Aug 24 15:27:37 PDT 2010


Author: lattner
Date: Tue Aug 24 17:27:37 2010
New Revision: 111979

URL: http://llvm.org/viewvc/llvm-project?rev=111979&view=rev
Log:
correct the -isystem option to not add the -isysroot path.  Only the weird
-iwithsysroot flag should do that.  This fixes rdar://8345942

Modified:
    cfe/trunk/include/clang/Frontend/HeaderSearchOptions.h
    cfe/trunk/lib/Frontend/CompilerInvocation.cpp
    cfe/trunk/lib/Frontend/InitHeaderSearch.cpp

Modified: cfe/trunk/include/clang/Frontend/HeaderSearchOptions.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/HeaderSearchOptions.h?rev=111979&r1=111978&r2=111979&view=diff
==============================================================================
--- cfe/trunk/include/clang/Frontend/HeaderSearchOptions.h (original)
+++ cfe/trunk/include/clang/Frontend/HeaderSearchOptions.h Tue Aug 24 17:27:37 2010
@@ -35,11 +35,16 @@
     frontend::IncludeDirGroup Group;
     unsigned IsUserSupplied : 1;
     unsigned IsFramework : 1;
-
-    Entry(llvm::StringRef _Path, frontend::IncludeDirGroup _Group,
-          bool _IsUserSupplied, bool _IsFramework)
-      : Path(_Path), Group(_Group), IsUserSupplied(_IsUserSupplied),
-        IsFramework(_IsFramework) {}
+    
+    /// IsSysRootRelative - This is true if an absolute path should be treated
+    /// relative to the sysroot, or false if it should always be the absolute
+    /// path.
+    unsigned IsSysRootRelative : 1;
+
+    Entry(llvm::StringRef path, frontend::IncludeDirGroup group,
+          bool isUserSupplied, bool isFramework, bool isSysRootRelative)
+      : Path(path), Group(group), IsUserSupplied(isUserSupplied),
+        IsFramework(isFramework), IsSysRootRelative(isSysRootRelative) {}
   };
 
   /// If non-empty, the directory to use as a "virtual system root" for include
@@ -85,8 +90,9 @@
 
   /// AddPath - Add the \arg Path path to the specified \arg Group list.
   void AddPath(llvm::StringRef Path, frontend::IncludeDirGroup Group,
-               bool IsUserSupplied, bool IsFramework) {
-    UserEntries.push_back(Entry(Path, Group, IsUserSupplied, IsFramework));
+               bool IsUserSupplied, bool IsFramework, bool IsSysRootRelative) {
+    UserEntries.push_back(Entry(Path, Group, IsUserSupplied, IsFramework,
+                                IsSysRootRelative));
   }
 };
 

Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=111979&r1=111978&r2=111979&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
+++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Tue Aug 24 17:27:37 2010
@@ -1149,7 +1149,7 @@
   for (arg_iterator it = Args.filtered_begin(OPT_I, OPT_F),
          ie = Args.filtered_end(); it != ie; ++it)
     Opts.AddPath((*it)->getValue(Args), frontend::Angled, true,
-                 /*IsFramework=*/ (*it)->getOption().matches(OPT_F));
+                 /*IsFramework=*/ (*it)->getOption().matches(OPT_F), true);
 
   // Add -iprefix/-iwith-prefix/-iwithprefixbefore options.
   llvm::StringRef Prefix = ""; // FIXME: This isn't the correct default prefix.
@@ -1161,21 +1161,22 @@
       Prefix = A->getValue(Args);
     else if (A->getOption().matches(OPT_iwithprefix))
       Opts.AddPath(Prefix.str() + A->getValue(Args),
-                   frontend::System, false, false);
+                   frontend::System, false, false, true);
     else
       Opts.AddPath(Prefix.str() + A->getValue(Args),
-                   frontend::Angled, false, false);
+                   frontend::Angled, false, false, true);
   }
 
   for (arg_iterator it = Args.filtered_begin(OPT_idirafter),
          ie = Args.filtered_end(); it != ie; ++it)
-    Opts.AddPath((*it)->getValue(Args), frontend::After, true, false);
+    Opts.AddPath((*it)->getValue(Args), frontend::After, true, false, true);
   for (arg_iterator it = Args.filtered_begin(OPT_iquote),
          ie = Args.filtered_end(); it != ie; ++it)
-    Opts.AddPath((*it)->getValue(Args), frontend::Quoted, true, false);
+    Opts.AddPath((*it)->getValue(Args), frontend::Quoted, true, false, true);
   for (arg_iterator it = Args.filtered_begin(OPT_isystem, OPT_iwithsysroot),
          ie = Args.filtered_end(); it != ie; ++it)
-    Opts.AddPath((*it)->getValue(Args), frontend::System, true, false);
+    Opts.AddPath((*it)->getValue(Args), frontend::System, true, false,
+                 (*it)->getOption().matches(OPT_iwithsysroot));
 
   // FIXME: Need options for the various environment variables!
 }

Modified: cfe/trunk/lib/Frontend/InitHeaderSearch.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/InitHeaderSearch.cpp?rev=111979&r1=111978&r2=111979&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/InitHeaderSearch.cpp (original)
+++ cfe/trunk/lib/Frontend/InitHeaderSearch.cpp Tue Aug 24 17:27:37 2010
@@ -912,7 +912,7 @@
   for (unsigned i = 0, e = HSOpts.UserEntries.size(); i != e; ++i) {
     const HeaderSearchOptions::Entry &E = HSOpts.UserEntries[i];
     Init.AddPath(E.Path, E.Group, false, E.IsUserSupplied, E.IsFramework,
-                 false);
+                 !E.IsSysRootRelative);
   }
 
   // Add entries from CPATH and friends.





More information about the cfe-commits mailing list