1 /* { dg-additional-options "-fno-analyzer-state-merge" } */
2 
3 #include "analyzer-decls.h"
4 
__analyzer_only_called_when_flag_a_true(int i)5 static void __analyzer_only_called_when_flag_a_true (int i)
6 {
7   __analyzer_eval (i == 42); /* { dg-warning "TRUE" } */
8 }
9 
__analyzer_only_called_when_flag_b_true(int i)10 static void __analyzer_only_called_when_flag_b_true (int i)
11 {
12   __analyzer_eval (i == 17); /* { dg-warning "TRUE" } */
13 }
14 
test_1(int flag_a,int flag_b)15 int test_1 (int flag_a, int flag_b)
16 {
17   int i = 17;
18 
19   __analyzer_eval (flag_a); /* { dg-warning "UNKNOWN" } */
20   __analyzer_eval (flag_b); /* { dg-warning "UNKNOWN" } */
21 
22   if (flag_a)
23     {
24       __analyzer_eval (flag_a); /* { dg-warning "TRUE" } */
25       __analyzer_eval (flag_b); /* { dg-warning "UNKNOWN" } */
26       i = 42;
27     }
28 
29   __analyzer_eval (flag_b); /* { dg-warning "UNKNOWN" } */
30 
31   if (flag_a)
32     {
33       __analyzer_eval (flag_a); /* { dg-warning "TRUE" } */
34       __analyzer_eval (flag_b); /* { dg-warning "UNKNOWN" } */
35       __analyzer_eval (i == 42); /* { dg-warning "TRUE" } */
36       __analyzer_eval (i == 17); /* { dg-warning "FALSE" } */
37       __analyzer_only_called_when_flag_a_true (i);
38     }
39   else
40     {
41       __analyzer_eval (flag_a); /* { dg-warning "FALSE" } */
42       __analyzer_eval (flag_b); /* { dg-warning "UNKNOWN" } */
43       __analyzer_eval (i == 42); /* { dg-warning "FALSE" } */
44       __analyzer_eval (i == 17); /* { dg-warning "TRUE" } */
45       __analyzer_only_called_when_flag_b_true (i);
46     }
47 }
48