diff options
| author | Reka Kovacs <rekanikolett@gmail.com> | 2018-08-02 22:31:03 +0000 |
|---|---|---|
| committer | Reka Kovacs <rekanikolett@gmail.com> | 2018-08-02 22:31:03 +0000 |
| commit | 38679fd63025bb2939e12c86f85f699dd60e866d (patch) | |
| tree | d7aff0e59fcb2bad32f6c03f3de17192d79f1b20 /clang/test/Analysis | |
| parent | 5a9baa330caf473b9b1fd7c256258411932fba4c (diff) | |
| download | bcm5719-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.cpp | 34 |
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 |

