| //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 |