NoQ created this revision.
NoQ added a reviewer: zaks.anna.
NoQ added subscribers: dcoughlin, xazax.hun, a.sidorin, cfe-commits.

The `-analyze-function` option is very useful when debugging test failures, 
especially when printing or viewing exploded graphs - with this option you no 
longer need to delete or comment out other test cases.

But because this option accepts unqualified identifiers, it is hard to use this 
option in C++ tests (in which you often need to test a particular method of a 
particular class, but there's no way to specify the class, eg. D22374).

This patch changes `-analyze-function` to accept qualified names. Because 
`-analyzer-display-progress` has recently been changed to display qualified 
names, you can use `-analyzer-display-progress` to quickly lookup the exact 
name you need to put into `-analyze-function`.

Yeah, i agree it's a good idea to update the debugging tricks doc, just as soon 
as i get to it :)

https://reviews.llvm.org/D22856

Files:
  lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
  test/Analysis/analyzeOneFunction.m

Index: test/Analysis/analyzeOneFunction.m
===================================================================
--- test/Analysis/analyzeOneFunction.m
+++ test/Analysis/analyzeOneFunction.m
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -analyze -analyze-function="myMethodWithY:withX:" 
-analyzer-checker=core,osx.cocoa.RetainCount -analyzer-store=region -verify %s
+// RUN: %clang_cc1 -analyze -analyze-function="Test1::myMethodWithY:withX:" 
-analyzer-checker=core,osx.cocoa.RetainCount -analyzer-store=region -verify %s
 
 typedef signed char BOOL;
 typedef unsigned int NSUInteger;
Index: lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
===================================================================
--- lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
+++ lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
@@ -569,14 +569,8 @@
 }
 
 static std::string getFunctionName(const Decl *D) {
-  if (const ObjCMethodDecl *ID = dyn_cast<ObjCMethodDecl>(D)) {
-    return ID->getSelector().getAsString();
-  }
-  if (const FunctionDecl *ND = dyn_cast<FunctionDecl>(D)) {
-    IdentifierInfo *II = ND->getIdentifier();
-    if (II)
-      return II->getName();
-  }
+  if (const NamedDecl *ND = dyn_cast<NamedDecl>(D))
+    return ND->getQualifiedNameAsString();
   return "";
 }
 


Index: test/Analysis/analyzeOneFunction.m
===================================================================
--- test/Analysis/analyzeOneFunction.m
+++ test/Analysis/analyzeOneFunction.m
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -analyze -analyze-function="myMethodWithY:withX:" -analyzer-checker=core,osx.cocoa.RetainCount -analyzer-store=region -verify %s
+// RUN: %clang_cc1 -analyze -analyze-function="Test1::myMethodWithY:withX:" -analyzer-checker=core,osx.cocoa.RetainCount -analyzer-store=region -verify %s
 
 typedef signed char BOOL;
 typedef unsigned int NSUInteger;
Index: lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
===================================================================
--- lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
+++ lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp
@@ -569,14 +569,8 @@
 }
 
 static std::string getFunctionName(const Decl *D) {
-  if (const ObjCMethodDecl *ID = dyn_cast<ObjCMethodDecl>(D)) {
-    return ID->getSelector().getAsString();
-  }
-  if (const FunctionDecl *ND = dyn_cast<FunctionDecl>(D)) {
-    IdentifierInfo *II = ND->getIdentifier();
-    if (II)
-      return II->getName();
-  }
+  if (const NamedDecl *ND = dyn_cast<NamedDecl>(D))
+    return ND->getQualifiedNameAsString();
   return "";
 }
 
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to