From 8804f40321c27394d328b9abe58c2ec8ef2621e1 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 27 Apr 2009 22:02:30 +0000 Subject: -E, -Eonly and -parse-noop now work with PCH! llvm-svn: 70259 --- clang/tools/clang-cc/clang-cc.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'clang/tools') diff --git a/clang/tools/clang-cc/clang-cc.cpp b/clang/tools/clang-cc/clang-cc.cpp index 4f4d3a3fff3..afc57f127d3 100644 --- a/clang/tools/clang-cc/clang-cc.cpp +++ b/clang/tools/clang-cc/clang-cc.cpp @@ -1667,12 +1667,8 @@ static void ProcessInputFile(Preprocessor &PP, PreprocessorFactory &PPF, break; } - case PrintPreprocessedInput: { // -E mode. - llvm::TimeRegion Timer(ClangFrontendTimer); - DoPrintPreprocessedInput(PP, OutputFile); - ClearSourceMgr = true; + case PrintPreprocessedInput: break; - } case ParseNoop: break; @@ -1750,19 +1746,23 @@ static void ProcessInputFile(Preprocessor &PP, PreprocessorFactory &PPF, /* FreeMemory = */ !DisableFree, /* size_reserve = */0, /* InitializeBuiltins = */ImplicitIncludePCH.empty())); - + llvm::OwningPtr Reader; + llvm::OwningPtr 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 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 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 @@ static void ProcessInputFile(Preprocessor &PP, PreprocessorFactory &PPF, 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) -- cgit v1.2.1