diff options
author | Ted Kremenek <kremenek@apple.com> | 2010-02-14 02:44:52 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2010-02-14 02:44:52 +0000 |
commit | eff72bb1347a78e8b97cfaae93f777d82857254a (patch) | |
tree | 48e80166b9a214fb9127200a6eec83fc9ba5c2e7 /clang/lib/Frontend/AnalysisConsumer.cpp | |
parent | c4b4d3953c89d8d8dee4c989c8b4411eda0684e8 (diff) | |
download | bcm5719-llvm-eff72bb1347a78e8b97cfaae93f777d82857254a.tar.gz bcm5719-llvm-eff72bb1347a78e8b97cfaae93f777d82857254a.zip |
Two changes to AnalysisConsumer::HandleTopLevelSingleDecl():
(1) Since CXXMethodDecl subclasses FunctionDecl (and CXXDestructorDecl
and CXXConversion subclass CXXMethodDecl), refactor switch statement
to handle them all in one spot.
(2) Use 'DeclarationName::getAsString()' to handle all functions that
don't have simple identifiers (fixing a null dereference when scanning
for specific functions).
llvm-svn: 96146
Diffstat (limited to 'clang/lib/Frontend/AnalysisConsumer.cpp')
-rw-r--r-- | clang/lib/Frontend/AnalysisConsumer.cpp | 34 |
1 files changed, 11 insertions, 23 deletions
diff --git a/clang/lib/Frontend/AnalysisConsumer.cpp b/clang/lib/Frontend/AnalysisConsumer.cpp index 84f0157624d..62073269c1b 100644 --- a/clang/lib/Frontend/AnalysisConsumer.cpp +++ b/clang/lib/Frontend/AnalysisConsumer.cpp @@ -205,42 +205,30 @@ namespace llvm { void AnalysisConsumer::HandleTopLevelSingleDecl(Decl *D) { switch (D->getKind()) { + case Decl::CXXConstructor: + case Decl::CXXDestructor: + case Decl::CXXConversion: + case Decl::CXXMethod: case Decl::Function: { FunctionDecl* FD = cast<FunctionDecl>(D); - if (!Opts.AnalyzeSpecificFunction.empty() && - Opts.AnalyzeSpecificFunction != FD->getIdentifier()->getName()) - break; + FD->getDeclName().getAsString() != Opts.AnalyzeSpecificFunction) + break; - Stmt* Body = FD->getBody(); - if (Body) HandleCode(FD, Body, FunctionActions); + if (Stmt *Body = FD->getBody()) + HandleCode(FD, Body, FunctionActions); break; } case Decl::ObjCMethod: { ObjCMethodDecl* MD = cast<ObjCMethodDecl>(D); - if (Opts.AnalyzeSpecificFunction.size() > 0 && + if (!Opts.AnalyzeSpecificFunction.empty() && Opts.AnalyzeSpecificFunction != MD->getSelector().getAsString()) return; - Stmt* Body = MD->getBody(); - if (Body) HandleCode(MD, Body, ObjCMethodActions); - break; - } - - case Decl::CXXConstructor: - case Decl::CXXDestructor: - case Decl::CXXConversion: - case Decl::CXXMethod: { - CXXMethodDecl *CXXMD = cast<CXXMethodDecl>(D); - - if (Opts.AnalyzeSpecificFunction.size() > 0 && - Opts.AnalyzeSpecificFunction != CXXMD->getName()) - return; - - Stmt *Body = CXXMD->getBody(); - if (Body) HandleCode(CXXMD, Body, FunctionActions); + if (Stmt* Body = MD->getBody()) + HandleCode(MD, Body, ObjCMethodActions); break; } |