[cfe-commits] r86728 - in /cfe/trunk: include/clang/Frontend/PreprocessorOptions.h tools/clang-cc/clang-cc.cpp

Daniel Dunbar daniel at zuster.org
Tue Nov 10 14:09:38 PST 2009


Author: ddunbar
Date: Tue Nov 10 16:09:38 2009
New Revision: 86728

URL: http://llvm.org/viewvc/llvm-project?rev=86728&view=rev
Log:
Decouple more of clang-cc by moving ImplicitP[CT]H options into
PreprocessorOptions.

Global variables used as [in] [out] parameters considered harmful.

Modified:
    cfe/trunk/include/clang/Frontend/PreprocessorOptions.h
    cfe/trunk/tools/clang-cc/clang-cc.cpp

Modified: cfe/trunk/include/clang/Frontend/PreprocessorOptions.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/PreprocessorOptions.h?rev=86728&r1=86727&r2=86728&view=diff

==============================================================================
--- cfe/trunk/include/clang/Frontend/PreprocessorOptions.h (original)
+++ cfe/trunk/include/clang/Frontend/PreprocessorOptions.h Tue Nov 10 16:09:38 2009
@@ -28,6 +28,13 @@
   unsigned UsePredefines : 1; /// Initialize the preprocessor with the compiler
                               /// and target specific predefines.
 
+  /// The implicit PCH included at the start of the translation unit, or empty.
+  std::string ImplicitPCHInclude;
+
+  /// The implicit PTH input included at the start of the translation unit, or
+  /// empty.
+  std::string ImplicitPTHInclude;
+
 public:
   PreprocessorOptions() : UsePredefines(true) {}
 
@@ -36,6 +43,24 @@
     UsePredefines = Value;
   }
 
+  const std::string &getImplicitPCHInclude() const {
+    return ImplicitPCHInclude;
+  }
+  void setImplicitPCHInclude(llvm::StringRef Value) {
+    assert((Value.empty() || ImplicitPTHInclude.empty()) &&
+           "Cannot both implicit PCH and PTH includes!");
+    ImplicitPCHInclude = Value;
+  }
+
+  const std::string &getImplicitPTHInclude() const {
+    return ImplicitPTHInclude;
+  }
+  void setImplicitPTHInclude(llvm::StringRef Value) {
+    assert((ImplicitPCHInclude.empty() || Value.empty()) &&
+           "Cannot both implicit PCH and PTH includes!");
+    ImplicitPTHInclude = Value;
+  }
+
   void addMacroDef(const std::string &Name) {
     Macros.push_back(std::make_pair(Name, false));
   }

Modified: cfe/trunk/tools/clang-cc/clang-cc.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-cc/clang-cc.cpp?rev=86728&r1=86727&r2=86728&view=diff

==============================================================================
--- cfe/trunk/tools/clang-cc/clang-cc.cpp (original)
+++ cfe/trunk/tools/clang-cc/clang-cc.cpp Tue Nov 10 16:09:38 2009
@@ -1090,6 +1090,9 @@
 }
 
 static void InitializePreprocessorOptions(PreprocessorOptions &InitOpts) {
+  InitOpts.setImplicitPCHInclude(ImplicitIncludePCH);
+  InitOpts.setImplicitPTHInclude(ImplicitIncludePTH);
+
   // Use predefines?
   InitOpts.setUsePredefines(!UndefMacros);
 
@@ -1143,7 +1146,7 @@
         std::string OriginalFile = PCHReader::getOriginalSourceFile(*Ptr);
         if (!OriginalFile.empty()) {
           InitOpts.addInclude(OriginalFile, false);
-          ImplicitIncludePCH.clear();
+          InitOpts.setImplicitPCHInclude("");
         }
       }
     }
@@ -1159,15 +1162,16 @@
                    const PreprocessorOptions &PPOpts, TargetInfo &Target,
                    SourceManager &SourceMgr, HeaderSearch &HeaderInfo) {
   PTHManager *PTHMgr = 0;
-  if (!TokenCache.empty() && !ImplicitIncludePTH.empty()) {
+  if (!TokenCache.empty() && !PPOpts.getImplicitPTHInclude().empty()) {
     fprintf(stderr, "error: cannot use both -token-cache and -include-pth "
             "options\n");
     exit(1);
   }
 
   // Use PTH?
-  if (!TokenCache.empty() || !ImplicitIncludePTH.empty()) {
-    const std::string& x = TokenCache.empty() ? ImplicitIncludePTH:TokenCache;
+  if (!TokenCache.empty() || !PPOpts.getImplicitPTHInclude().empty()) {
+    const std::string& x = TokenCache.empty() ?
+      PPOpts.getImplicitPTHInclude() : TokenCache;
     PTHMgr = PTHManager::Create(x, &Diags,
                                 TokenCache.empty() ? Diagnostic::Error
                                 : Diagnostic::Warning);
@@ -1736,7 +1740,9 @@
   llvm::OwningPtr<PCHReader> Reader;
   llvm::OwningPtr<ExternalASTSource> Source;
 
-  if (!ImplicitIncludePCH.empty()) {
+  const std::string &ImplicitPCHInclude =
+    CompOpts.getPreprocessorOpts().getImplicitPCHInclude();
+  if (!ImplicitPCHInclude.empty()) {
     // If the user specified -isysroot, it will be used for relocatable PCH
     // files.
     const char *isysrootPCH = 0;
@@ -1747,7 +1753,7 @@
 
     // The user has asked us to include a precompiled header. Load
     // the precompiled header into the AST context.
-    switch (Reader->ReadPCH(ImplicitIncludePCH)) {
+    switch (Reader->ReadPCH(ImplicitPCHInclude)) {
     case PCHReader::Success: {
       // Set the predefines buffer as suggested by the PCH
       // reader. Typically, the predefines buffer will be empty.
@@ -2206,7 +2212,7 @@
                               PhonyDependencyTarget);
     }
 
-    if (ImplicitIncludePCH.empty()) {
+    if (CompOpts.getPreprocessorOpts().getImplicitPCHInclude().empty()) {
       if (InitializeSourceManager(*PP.get(), InFile))
         continue;
 





More information about the cfe-commits mailing list