forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			35 lines
		
	
	
		
			762 B
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			762 B
		
	
	
	
		
			C++
		
	
	
	
| //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
 |