diff options
Diffstat (limited to 'test/Analysis/end-function-return-stmt.cpp')
-rw-r--r-- | test/Analysis/end-function-return-stmt.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/test/Analysis/end-function-return-stmt.cpp b/test/Analysis/end-function-return-stmt.cpp new file mode 100644 index 0000000000000..036ccba3aa932 --- /dev/null +++ b/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 |