summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2009-09-26 04:15:09 +0000
committerTed Kremenek <kremenek@apple.com>2009-09-26 04:15:09 +0000
commit9a4e5663d2ddad1d5b0b76c911f4a59a93785f62 (patch)
treebe16a7a0a8e57047d0669b1b0aaf966b4dc4dd23
parent0374742326c51a1ad543bebcd77a6d3dc6bd05fd (diff)
downloadbcm5719-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.cpp35
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);
OpenPOWER on IntegriCloud