diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Frontend/ASTUnit.cpp | 34 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTReader.cpp | 10 |
2 files changed, 37 insertions, 7 deletions
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp index bd7e712bc78..b81f89390d8 100644 --- a/clang/lib/Frontend/ASTUnit.cpp +++ b/clang/lib/Frontend/ASTUnit.cpp @@ -749,9 +749,20 @@ bool ASTUnit::Parse(llvm::MemoryBuffer *OverrideMainBuffer) { getSourceManager()); StoredDiagnostics[I].setLocation(Loc); } + + if (getenv("LIBCLANG_LOGGING")) + fprintf(stderr, "libclang: using precompiled preamble for \"%s\" at " + "\"%s\"\n", + OriginalSourceFile.c_str(), + PreambleFile.c_str()); + } else { PreprocessorOpts.PrecompiledPreambleBytes.first = 0; PreprocessorOpts.PrecompiledPreambleBytes.second = false; + + if (getenv("LIBCLANG_LOGGING")) + fprintf(stderr, "libclang: not using precompiled preamble for \"%s\"\n", + OriginalSourceFile.c_str()); } llvm::OwningPtr<TopLevelDeclTrackerAction> Act; @@ -1215,6 +1226,13 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble( // Create the source manager. Clang.setSourceManager(new SourceManager(getDiagnostics())); + if (getenv("LIBCLANG_LOGGING")) + fprintf(stderr, "libclang: creating precompiled preamble for \"%s\" at " + "\"%s\" (%u bytes)\n", + OriginalSourceFile.c_str(), + PreamblePCHPath.c_str(), + (unsigned)Preamble.size()); + llvm::OwningPtr<PrecompilePreambleAction> Act; Act.reset(new PrecompilePreambleAction(*this)); if (!Act->BeginSourceFile(Clang, Clang.getFrontendOpts().Inputs[0].second, @@ -1229,6 +1247,11 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble( PreambleRebuildCounter = DefaultPreambleRebuildInterval; PreprocessorOpts.eraseRemappedFile( PreprocessorOpts.remapped_file_buffer_end() - 1); + + if (getenv("LIBCLANG_LOGGING")) + fprintf(stderr, "libclang: precompiled preamble compilation for \"%s\" " + "failed\n", OriginalSourceFile.c_str()); + return 0; } @@ -1239,7 +1262,10 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble( if (Diagnostics->hasErrorOccurred()) { // There were errors parsing the preamble, so no precompiled header was // generated. Forget that we even tried. - // FIXME: Should we leave a note for ourselves to try again? + + if (getenv("LIBCLANG_LOGGING")) + fprintf(stderr, "libclang: precompiled preamble compilation for \"%s\" " + "failed\n", OriginalSourceFile.c_str()); llvm::sys::Path(FrontendOpts.OutputFile).eraseFromDisk(); Preamble.clear(); if (CreatedPreambleBuffer) @@ -1278,7 +1304,11 @@ llvm::MemoryBuffer *ASTUnit::getMainBufferWithPrecompiledPreamble( if (PreambleTimer) PreambleTimer->stopTimer(); - + + if (getenv("LIBCLANG_LOGGING")) + fprintf(stderr, "libclang: precompiled preamble for \"%s\" completed\n", + OriginalSourceFile.c_str()); + PreambleRebuildCounter = 1; PreprocessorOpts.eraseRemappedFile( PreprocessorOpts.remapped_file_buffer_end() - 1); diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp index 91f0d36118b..cc593e98271 100644 --- a/clang/lib/Serialization/ASTReader.cpp +++ b/clang/lib/Serialization/ASTReader.cpp @@ -3362,11 +3362,11 @@ void ASTReader::InitializeSema(Sema &S) { // Makes sure any declarations that were deserialized "too early" // still get added to the identifier's declaration chains. - if (SemaObj->TUScope) { - for (unsigned I = 0, N = PreloadedDecls.size(); I != N; ++I) { + for (unsigned I = 0, N = PreloadedDecls.size(); I != N; ++I) { + if (SemaObj->TUScope) SemaObj->TUScope->AddDecl(PreloadedDecls[I]); - SemaObj->IdResolver.AddDecl(PreloadedDecls[I]); - } + + SemaObj->IdResolver.AddDecl(PreloadedDecls[I]); } PreloadedDecls.clear(); @@ -3564,8 +3564,8 @@ ASTReader::SetGloballyVisibleDecls(IdentifierInfo *II, // and add it to the declaration chain for this identifier, so // that (unqualified) name lookup will find it. SemaObj->TUScope->AddDecl(D); - SemaObj->IdResolver.AddDeclToIdentifierChain(II, D); } + SemaObj->IdResolver.AddDeclToIdentifierChain(II, D); } else { // Queue this declaration so that it will be added to the // translation unit scope and identifier's declaration chain |