[cfe-commits] r70259 - in /cfe/trunk: lib/Frontend/PCHReader.cpp tools/clang-cc/clang-cc.cpp

Chris Lattner sabre at nondot.org
Mon Apr 27 15:02:30 PDT 2009


Author: lattner
Date: Mon Apr 27 17:02:30 2009
New Revision: 70259

URL: http://llvm.org/viewvc/llvm-project?rev=70259&view=rev
Log:
-E, -Eonly and -parse-noop now work with PCH!

Modified:
    cfe/trunk/lib/Frontend/PCHReader.cpp
    cfe/trunk/tools/clang-cc/clang-cc.cpp

Modified: cfe/trunk/lib/Frontend/PCHReader.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHReader.cpp?rev=70259&r1=70258&r2=70259&view=diff

==============================================================================
--- cfe/trunk/lib/Frontend/PCHReader.cpp (original)
+++ cfe/trunk/lib/Frontend/PCHReader.cpp Mon Apr 27 17:02:30 2009
@@ -270,6 +270,8 @@
     // Read all of the declarations visible at global scope with this
     // name.
     Sema *SemaObj = Reader.getSema();
+    if (!SemaObj) return II;
+    
     while (DataLen > 0) {
       NamedDecl *D = cast<NamedDecl>(Reader.GetDecl(ReadUnalignedLE32(d)));
       if (SemaObj) {

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=70259&r1=70258&r2=70259&view=diff

==============================================================================
--- cfe/trunk/tools/clang-cc/clang-cc.cpp (original)
+++ cfe/trunk/tools/clang-cc/clang-cc.cpp Mon Apr 27 17:02:30 2009
@@ -1667,12 +1667,8 @@
     break;
   }      
 
-  case PrintPreprocessedInput: {      // -E mode.
-    llvm::TimeRegion Timer(ClangFrontendTimer);
-    DoPrintPreprocessedInput(PP, OutputFile);
-    ClearSourceMgr = true;
+  case PrintPreprocessedInput:
     break;
-  }
       
   case ParseNoop:
     break;
@@ -1750,19 +1746,23 @@
                                       /* FreeMemory = */ !DisableFree,
                                       /* size_reserve = */0,
                        /* InitializeBuiltins = */ImplicitIncludePCH.empty()));
-     
+  llvm::OwningPtr<PCHReader> Reader;
+  llvm::OwningPtr<ExternalASTSource> Source;
+    
   if (!ImplicitIncludePCH.empty()) {
+    Reader.reset(new PCHReader(PP, ContextOwner.get()));
+    
     // The user has asked us to include a precompiled header. Load
     // the precompiled header into the AST context.
-    llvm::OwningPtr<PCHReader> Reader(new PCHReader(PP, ContextOwner.get()));
     switch (Reader->ReadPCH(ImplicitIncludePCH)) {
     case PCHReader::Success: {
       // Attach the PCH reader to the AST context as an external AST
       // source, so that declarations will be deserialized from the
       // PCH file as needed.
-      llvm::OwningPtr<ExternalASTSource> Source(Reader.take());
-      if (ContextOwner)
+      if (ContextOwner) {
+        Source.reset(Reader.take());
         ContextOwner->setExternalSource(Source);
+      }
 
       // Clear out the predefines buffer, because all of the
       // predefines are already in the PCH file.
@@ -1814,6 +1814,10 @@
     llvm::TimeRegion Timer(ClangFrontendTimer);
     ParseFile(PP, new MinimalAction(PP));
     ClearSourceMgr = true;
+  } else if (PA == PrintPreprocessedInput){  // -E mode.
+    llvm::TimeRegion Timer(ClangFrontendTimer);
+    DoPrintPreprocessedInput(PP, OutputFile);
+    ClearSourceMgr = true;
   }
   
   if (FixItRewrite)





More information about the cfe-commits mailing list