1 #include "analyzer-decls.h" 2 3 struct state 4 { 5 int mode; 6 int data; 7 }; 8 9 extern void do_stuff (struct state *, int); 10 test_1(struct state * s)11int test_1 (struct state *s) 12 { 13 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ 14 while (1) 15 { 16 __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */ 17 __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */ 18 /* TODO: why does the above need an extra stmt to merge state? */ 19 do_stuff (s, s->mode); 20 } 21 } 22 test_2(struct state * s)23int test_2 (struct state *s) 24 { 25 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ 26 while (1) 27 { 28 __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */ 29 __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */ 30 /* TODO: why does the above need an extra stmt to merge state? */ 31 switch (s->mode) 32 { 33 case 0: 34 __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enode" } */ 35 do_stuff (s, 0); 36 break; 37 case 1: 38 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ 39 do_stuff (s, 17); 40 break; 41 case 2: 42 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ 43 do_stuff (s, 5); 44 break; 45 case 3: 46 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ 47 return 42; 48 case 4: 49 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */ 50 return -3; 51 } 52 } 53 } 54