]> granicus.if.org Git - clang/commitdiff
Two changes to AnalysisConsumer::HandleTopLevelSingleDecl():
authorTed Kremenek <kremenek@apple.com>
Sun, 14 Feb 2010 02:44:52 +0000 (02:44 +0000)
committerTed Kremenek <kremenek@apple.com>
Sun, 14 Feb 2010 02:44:52 +0000 (02:44 +0000)
(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).

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96146 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/AnalysisConsumer.cpp

index 84f0157624df2f4ce7f35bb13ae57da337c14c02..62073269c1ba4f5650a8f63a62c969e3239407a5 100644 (file)
@@ -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;
   }