domtest.c revision 58f6f1e37ab32fdd0c8bab6771d8e09bc139e9ed
1// RUN: %clang -cc1 -analyze -analyzer-checker=debug.DumpDominators %s 2>&1 | FileCheck %s 2 3// Test the DominatorsTree implementation with various control flows 4int test1() 5{ 6 int x = 6; 7 int y = x/2; 8 int z; 9 10 while(y > 0) { 11 if(y < x) { 12 x = x/y; 13 y = y-1; 14 }else{ 15 z = x - y; 16 } 17 x = x - 1; 18 x = x - 1; 19 } 20 z = x+y; 21 z = 3; 22 return 0; 23} 24 25// CHECK: Immediate dominance tree (Node#,IDom#): 26// CHECK: (0,1) 27// CHECK: (1,2) 28// CHECK: (2,8) 29// CHECK: (3,4) 30// CHECK: (4,7) 31// CHECK: (5,7) 32// CHECK: (6,7) 33// CHECK: (7,2) 34// CHECK: (8,9) 35// CHECK: (9,9) 36 37int test2() 38{ 39 int x,y,z; 40 41 x = 10; y = 100; 42 if(x > 0){ 43 y = 1; 44 }else{ 45 while(x<=0){ 46 x++; 47 y++; 48 } 49 } 50 z = y; 51 52 return 0; 53} 54 55// CHECK: Immediate dominance tree (Node#,IDom#): 56// CHECK: (0,1) 57// CHECK: (1,6) 58// CHECK: (2,6) 59// CHECK: (3,4) 60// CHECK: (4,2) 61// CHECK: (5,6) 62// CHECK: (6,7) 63// CHECK: (7,7) 64 65int test3() 66{ 67 int x,y,z; 68 69 x = y = z = 1; 70 if(x>0) { 71 while(x>=0){ 72 while(y>=x) { 73 x = x-1; 74 y = y/2; 75 } 76 } 77 } 78 z = y; 79 80 return 0; 81} 82 83// CHECK: Immediate dominance tree (Node#,IDom#): 84// CHECK: (0,1) 85// CHECK: (1,7) 86// CHECK: (2,7) 87// CHECK: (3,4) 88// CHECK: (4,2) 89// CHECK: (5,6) 90// CHECK: (6,4) 91// CHECK: (7,8) 92// CHECK: (8,8) 93 94int test4() 95{ 96 int y = 3; 97 while(y > 0) { 98 if(y < 3) { 99 while(y>0) 100 y ++; 101 }else{ 102 while(y<10) 103 y ++; 104 } 105 } 106 return 0; 107} 108 109// CHECK: Immediate dominance tree (Node#,IDom#): 110// CHECK: (0,1) 111// CHECK: (1,2) 112// CHECK: (2,11) 113// CHECK: (3,10) 114// CHECK: (4,10) 115// CHECK: (5,6) 116// CHECK: (6,4) 117// CHECK: (7,10) 118// CHECK: (8,9) 119// CHECK: (9,7) 120// CHECK: (10,2) 121// CHECK: (11,12) 122// CHECK: (12,12) 123 124int test5() 125{ 126 int x,y,z,a,b,c; 127 x = 1; 128 y = 2; 129 z = 3; 130 a = 4; 131 b = 5; 132 c = 6; 133 if ( x < 10 ) { 134 if ( y < 10 ) { 135 if ( z < 10 ) { 136 x = 4; 137 } else { 138 x = 5; 139 } 140 a = 10; 141 } else { 142 x = 6; 143 } 144 b = 10; 145 } else { 146 x = 7; 147 } 148 c = 11; 149 return 0; 150} 151 152// CHECK: Immediate dominance tree (Node#,IDom#): 153// CHECK: (0,1) 154// CHECK: (1,10) 155// CHECK: (2,10) 156// CHECK: (3,9) 157// CHECK: (4,9) 158// CHECK: (5,8) 159// CHECK: (6,8) 160// CHECK: (7,8) 161// CHECK: (8,9) 162// CHECK: (9,10) 163// CHECK: (10,11) 164// CHECK: (11,11) 165 166