diff options
| author | Ted Kremenek <kremenek@apple.com> | 2009-09-26 04:15:09 +0000 |
|---|---|---|
| committer | Ted Kremenek <kremenek@apple.com> | 2009-09-26 04:15:09 +0000 |
| commit | 9a4e5663d2ddad1d5b0b76c911f4a59a93785f62 (patch) | |
| tree | be16a7a0a8e57047d0669b1b0aaf966b4dc4dd23 | |
| parent | 0374742326c51a1ad543bebcd77a6d3dc6bd05fd (diff) | |
| download | bcm5719-llvm-9a4e5663d2ddad1d5b0b76c911f4a59a93785f62.tar.gz bcm5719-llvm-9a4e5663d2ddad1d5b0b76c911f4a59a93785f62.zip | |
Hoist some branches in AnalysisManager::HandleTranslationUnit so we
avoid scanning for an "entry point" FunctionDecl if we (a) have no
translation unit actions and (b) no entry point function has been
specified.
llvm-svn: 82846
| -rw-r--r-- | clang/lib/Frontend/AnalysisConsumer.cpp | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/clang/lib/Frontend/AnalysisConsumer.cpp b/clang/lib/Frontend/AnalysisConsumer.cpp index d078cb7978d..276599470b7 100644 --- a/clang/lib/Frontend/AnalysisConsumer.cpp +++ b/clang/lib/Frontend/AnalysisConsumer.cpp @@ -223,30 +223,33 @@ void AnalysisConsumer::HandleTopLevelSingleDecl(Decl *D) { } void AnalysisConsumer::HandleTranslationUnit(ASTContext &C) { - // Find the entry function definition. - FunctionDecl *FD = 0; - TranslationUnitDecl *TU = Ctx->getTranslationUnitDecl(); - for (DeclContext::decl_iterator I = TU->decls_begin(), E = TU->decls_end(); - I != E; ++I) { - if (FunctionDecl *fd = dyn_cast<FunctionDecl>(*I)) - if (fd->isThisDeclarationADefinition() && - fd->getNameAsString() == Opts.AnalyzeSpecificFunction) { - FD = fd; - break; + + TranslationUnitDecl *TU = C.getTranslationUnitDecl(); + + if (!TranslationUnitActions.empty()) { + // Find the entry function definition (if any). + FunctionDecl *FD = 0; + + if (!Opts.AnalyzeSpecificFunction.empty()) { + for (DeclContext::decl_iterator I=TU->decls_begin(), E=TU->decls_end(); + I != E; ++I) { + if (FunctionDecl *fd = dyn_cast<FunctionDecl>(*I)) + if (fd->isThisDeclarationADefinition() && + fd->getNameAsString() == Opts.AnalyzeSpecificFunction) { + FD = fd; + break; + } } - } + } - if(!TranslationUnitActions.empty()) { for (Actions::iterator I = TranslationUnitActions.begin(), E = TranslationUnitActions.end(); I != E; ++I) (*I)(*Mgr, FD); } if (!ObjCImplementationActions.empty()) { - TranslationUnitDecl *TUD = C.getTranslationUnitDecl(); - - for (DeclContext::decl_iterator I = TUD->decls_begin(), - E = TUD->decls_end(); + for (DeclContext::decl_iterator I = TU->decls_begin(), + E = TU->decls_end(); I != E; ++I) if (ObjCImplementationDecl* ID = dyn_cast<ObjCImplementationDecl>(*I)) HandleCode(ID, 0, ObjCImplementationActions); |

