// RUN: rm -f %t | |
// RUN: %clang_analyze_cc1 -analyzer-checker=debug.DumpDominators %s > %t 2>&1 | |
// RUN: FileCheck --input-file=%t %s | |
// Test the DominatorsTree implementation with various control flows | |
int test1() | |
{ | |
int x = 6; | |
int y = x/2; | |
int z; | |
while(y > 0) { | |
if(y < x) { | |
x = x/y; | |
y = y-1; | |
}else{ | |
z = x - y; | |
} | |
x = x - 1; | |
x = x - 1; | |
} | |
z = x+y; | |
z = 3; | |
return 0; | |
} | |
// CHECK: Immediate dominance tree (Node#,IDom#): | |
// CHECK: (0,1) | |
// CHECK: (1,7) | |
// CHECK: (2,3) | |
// CHECK: (3,6) | |
// CHECK: (4,6) | |
// CHECK: (5,6) | |
// CHECK: (6,7) | |
// CHECK: (7,8) | |
// CHECK: (8,9) | |
// CHECK: (9,9) | |
int test2() | |
{ | |
int x,y,z; | |
x = 10; y = 100; | |
if(x > 0){ | |
y = 1; | |
}else{ | |
while(x<=0){ | |
x++; | |
y++; | |
} | |
} | |
z = y; | |
return 0; | |
} | |
// CHECK: Immediate dominance tree (Node#,IDom#): | |
// CHECK: (0,1) | |
// CHECK: (1,6) | |
// CHECK: (2,3) | |
// CHECK: (3,4) | |
// CHECK: (4,6) | |
// CHECK: (5,6) | |
// CHECK: (6,7) | |
// CHECK: (7,7) | |
int test3() | |
{ | |
int x,y,z; | |
x = y = z = 1; | |
if(x>0) { | |
while(x>=0){ | |
while(y>=x) { | |
x = x-1; | |
y = y/2; | |
} | |
} | |
} | |
z = y; | |
return 0; | |
} | |
// CHECK: Immediate dominance tree (Node#,IDom#): | |
// CHECK: (0,1) | |
// CHECK: (1,7) | |
// CHECK: (2,5) | |
// CHECK: (3,4) | |
// CHECK: (4,5) | |
// CHECK: (5,6) | |
// CHECK: (6,7) | |
// CHECK: (7,8) | |
// CHECK: (8,8) | |
int test4() | |
{ | |
int y = 3; | |
while(y > 0) { | |
if(y < 3) { | |
while(y>0) | |
y ++; | |
}else{ | |
while(y<10) | |
y ++; | |
} | |
} | |
return 0; | |
} | |
// CHECK: Immediate dominance tree (Node#,IDom#): | |
// CHECK: (0,1) | |
// CHECK: (1,10) | |
// CHECK: (2,9) | |
// CHECK: (3,4) | |
// CHECK: (4,5) | |
// CHECK: (5,9) | |
// CHECK: (6,7) | |
// CHECK: (7,8) | |
// CHECK: (8,9) | |
// CHECK: (9,10) | |
// CHECK: (10,11) | |
// CHECK: (11,12) | |
// CHECK: (12,12) | |
int test5() | |
{ | |
int x,y,z,a,b,c; | |
x = 1; | |
y = 2; | |
z = 3; | |
a = 4; | |
b = 5; | |
c = 6; | |
if ( x < 10 ) { | |
if ( y < 10 ) { | |
if ( z < 10 ) { | |
x = 4; | |
} else { | |
x = 5; | |
} | |
a = 10; | |
} else { | |
x = 6; | |
} | |
b = 10; | |
} else { | |
x = 7; | |
} | |
c = 11; | |
return 0; | |
} | |
// CHECK: Immediate dominance tree (Node#,IDom#): | |
// CHECK: (0,1) | |
// CHECK: (1,10) | |
// CHECK: (2,10) | |
// CHECK: (3,9) | |
// CHECK: (4,9) | |
// CHECK: (5,8) | |
// CHECK: (6,8) | |
// CHECK: (7,8) | |
// CHECK: (8,9) | |
// CHECK: (9,10) | |
// CHECK: (10,11) | |
// CHECK: (11,11) | |