a.sidorin updated this revision to Diff 43674. a.sidorin marked an inline comment as done. a.sidorin added a comment.
Canonicalize the inserted declarations in a single place; honor ObjCMethodDecls. Repository: rL LLVM http://reviews.llvm.org/D15410 Files: lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp test/Analysis/inlining/analysis-order.c Index: test/Analysis/inlining/analysis-order.c =================================================================== --- /dev/null +++ test/Analysis/inlining/analysis-order.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core.builtin.NoReturnFunctions -analyzer-display-progress %s 2>&1 | FileCheck %s + +// Do not analyze test1() again because it was inlined +void test1(); + +void test2() { + test1(); +} + +void test1() { +} + +// CHECK: analysis-order.c test2 +// CHECK-NEXT: analysis-order.c test1 +// CHECK-NEXT: analysis-order.c test2 Index: lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp =================================================================== --- lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp +++ lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp @@ -494,7 +494,7 @@ // Add the visited callees to the global visited set. for (SetOfConstDecls::iterator I = VisitedCallees.begin(), E = VisitedCallees.end(); I != E; ++I) { - Visited.insert(*I); + Visited.insert(isa<ObjCMethodDecl>(*I) ? *I : (*I)->getCanonicalDecl()); } VisitedAsTopLevel.insert(D); }
Index: test/Analysis/inlining/analysis-order.c =================================================================== --- /dev/null +++ test/Analysis/inlining/analysis-order.c @@ -0,0 +1,15 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core.builtin.NoReturnFunctions -analyzer-display-progress %s 2>&1 | FileCheck %s + +// Do not analyze test1() again because it was inlined +void test1(); + +void test2() { + test1(); +} + +void test1() { +} + +// CHECK: analysis-order.c test2 +// CHECK-NEXT: analysis-order.c test1 +// CHECK-NEXT: analysis-order.c test2 Index: lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp =================================================================== --- lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp +++ lib/StaticAnalyzer/Frontend/AnalysisConsumer.cpp @@ -494,7 +494,7 @@ // Add the visited callees to the global visited set. for (SetOfConstDecls::iterator I = VisitedCallees.begin(), E = VisitedCallees.end(); I != E; ++I) { - Visited.insert(*I); + Visited.insert(isa<ObjCMethodDecl>(*I) ? *I : (*I)->getCanonicalDecl()); } VisitedAsTopLevel.insert(D); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits