forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			72 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_analyze_cc1 -std=c++14 %s \
 | |
| // RUN:   -analyzer-checker=debug.DumpDominators \
 | |
| // RUN:   -analyzer-checker=debug.DumpPostDominators \
 | |
| // RUN:   -analyzer-checker=debug.DumpControlDependencies \
 | |
| // RUN:   2>&1 | FileCheck %s
 | |
| 
 | |
| bool coin();
 | |
| 
 | |
| namespace pr42041_unreachable_cfg_successor {
 | |
| enum Kind {
 | |
|   A
 | |
| };
 | |
| 
 | |
| void f() {
 | |
|   switch(Kind{}) {
 | |
|   case A:
 | |
|     break;
 | |
|   }
 | |
| }
 | |
| } // end of namespace pr42041_unreachable_cfg_successor
 | |
| 
 | |
| //  [B3 (ENTRY)]  -> [B1] -> [B2] -> [B0 (EXIT)]
 | |
| 
 | |
| // CHECK:      Control dependencies (Node#,Dependency#):
 | |
| // CHECK-NEXT: Immediate dominance tree (Node#,IDom#):
 | |
| // CHECK-NEXT: (0,2)
 | |
| // CHECK-NEXT: (1,3)
 | |
| // CHECK-NEXT: (2,1)
 | |
| // CHECK-NEXT: (3,3)
 | |
| // CHECK-NEXT: Immediate post dominance tree (Node#,IDom#):
 | |
| // CHECK-NEXT: (0,0)
 | |
| // CHECK-NEXT: (1,2)
 | |
| // CHECK-NEXT: (2,0)
 | |
| // CHECK-NEXT: (3,1)
 | |
| 
 | |
| void funcWithBranch() {
 | |
|   int x = 0;
 | |
|   if (coin()) {
 | |
|     if (coin()) {
 | |
|       x = 5;
 | |
|     }
 | |
|     int j = 10 / x;
 | |
|     (void)j;
 | |
|   }
 | |
| }
 | |
| 
 | |
| //                  1st if  2nd if
 | |
| //  [B5 (ENTRY)]  -> [B4] -> [B3] -> [B2] -> [B1] -> [B0 (EXIT)]
 | |
| //                    \        \              /         /
 | |
| //                     \        ------------->         /
 | |
| //                      ------------------------------>
 | |
| 
 | |
| // CHECK:      Control dependencies (Node#,Dependency#):
 | |
| // CHECK-NEXT: (1,4)
 | |
| // CHECK-NEXT: (2,3)
 | |
| // CHECK-NEXT: (2,4)
 | |
| // CHECK-NEXT: (3,4)
 | |
| // CHECK-NEXT: Immediate dominance tree (Node#,IDom#):
 | |
| // CHECK-NEXT: (0,4)
 | |
| // CHECK-NEXT: (1,3)
 | |
| // CHECK-NEXT: (2,3)
 | |
| // CHECK-NEXT: (3,4)
 | |
| // CHECK-NEXT: (4,5)
 | |
| // CHECK-NEXT: (5,5)
 | |
| // CHECK-NEXT: Immediate post dominance tree (Node#,IDom#):
 | |
| // CHECK-NEXT: (0,0)
 | |
| // CHECK-NEXT: (1,0)
 | |
| // CHECK-NEXT: (2,1)
 | |
| // CHECK-NEXT: (3,1)
 | |
| // CHECK-NEXT: (4,0)
 | |
| // CHECK-NEXT: (5,4)
 |