summaryrefslogtreecommitdiffstats
path: root/clang/test/Analysis
diff options
context:
space:
mode:
authorReka Kovacs <rekanikolett@gmail.com>2018-08-02 22:31:03 +0000
committerReka Kovacs <rekanikolett@gmail.com>2018-08-02 22:31:03 +0000
commit38679fd63025bb2939e12c86f85f699dd60e866d (patch)
treed7aff0e59fcb2bad32f6c03f3de17192d79f1b20 /clang/test/Analysis
parent5a9baa330caf473b9b1fd7c256258411932fba4c (diff)
downloadbcm5719-llvm-38679fd63025bb2939e12c86f85f699dd60e866d.tar.gz
bcm5719-llvm-38679fd63025bb2939e12c86f85f699dd60e866d.zip
[analyzer] Obtain a ReturnStmt from a CFGAutomaticObjDtor.
The CoreEngine only gives us a ReturnStmt if the last element in the CFGBlock is a CFGStmt, otherwise the ReturnStmt is nullptr. This patch adds support for the case when the last element is a CFGAutomaticObjDtor, by returning its TriggerStmt as a ReturnStmt. Differential Revision: https://reviews.llvm.org/D49811 llvm-svn: 338777
Diffstat (limited to 'clang/test/Analysis')
-rw-r--r--clang/test/Analysis/end-function-return-stmt.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/clang/test/Analysis/end-function-return-stmt.cpp b/clang/test/Analysis/end-function-return-stmt.cpp
new file mode 100644
index 00000000000..036ccba3aa9
--- /dev/null
+++ b/clang/test/Analysis/end-function-return-stmt.cpp
@@ -0,0 +1,34 @@
+//RUN: %clang_analyze_cc1 -analyzer-checker=debug.AnalysisOrder -analyzer-config debug.AnalysisOrder:EndFunction=true %s 2>&1 | FileCheck %s
+
+// At the end of a function, we can only obtain a ReturnStmt if the last
+// CFGElement in the CFGBlock is either a CFGStmt or a CFGAutomaticObjDtor.
+
+void noReturnStmt() {}
+
+struct S {
+ S();
+ ~S();
+};
+
+int dtorAfterReturnStmt() {
+ S s;
+ return 0;
+}
+
+S endsWithReturnStmt() {
+ return S();
+}
+
+// endsWithReturnStmt()
+// CHECK: EndFunction
+// CHECK-NEXT: ReturnStmt: yes
+// CHECK-NEXT: CFGElement: CFGStmt
+
+// dtorAfterReturnStmt()
+// CHECK: EndFunction
+// CHECK-NEXT: ReturnStmt: yes
+// CHECK-NEXT: CFGElement: CFGAutomaticObjDtor
+
+// noReturnStmt()
+// CHECK: EndFunction
+// CHECK-NEXT: ReturnStmt: no
OpenPOWER on IntegriCloud