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)11 int 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)23 int 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