1 /* Tests for handling constraints on results of unknown fns. */
2
3 #include <stddef.h>
4 #include "analyzer-decls.h"
5
6 void unknown_fn (void *);
7
8 void test_1 (void)
9 {
10 int i;
11 unknown_fn (&i);
12 if (i)
13 __analyzer_eval (i); /* { dg-warning "TRUE" } */
14 else
15 __analyzer_eval (i); /* { dg-warning "FALSE" } */
16 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
17 }
18
19 struct foo
20 {
21 int i;
22 int j;
23 };
24
25 void test_2 (void)
26 {
27 struct foo f;
28 unknown_fn (&f);
29 if (f.j)
30 __analyzer_eval (f.j); /* { dg-warning "TRUE" } */
31 else
32 __analyzer_eval (f.j); /* { dg-warning "FALSE" } */
33 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
34 }
35
36 void test_3 (int flag)
37 {
38 int i;
39 unknown_fn (&i);
40 if (i)
41 {
42 __analyzer_eval (i); /* { dg-warning "TRUE" } */
43 if (flag)
44 __analyzer_eval (flag); /* { dg-warning "TRUE" } */
45 else
46 __analyzer_eval (flag); /* { dg-warning "FALSE" } */
47 }
48 else
49 __analyzer_eval (i); /* { dg-warning "FALSE" } */
50 if (flag)
51 __analyzer_eval (flag); /* { dg-warning "TRUE" } */
52 else
53 __analyzer_eval (flag); /* { dg-warning "FALSE" } */
54 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
55 }
56
57 void test_4 (int y)
58 {
59 int x;
60 unknown_fn (&x);
61 if (x)
62 {
63 __analyzer_eval (x); /* { dg-warning "TRUE" } */
64 x = 0;
65 }
66 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
67 }