1 /* { dg-additional-options "-fno-analyzer-transitivity" } */
2 #include "analyzer-decls.h"
3 
test(int i,int j)4 void test (int i, int j)
5 {
6   if (i > 4)
7     {
8       __analyzer_eval (i > 4); /* { dg-warning "TRUE" } */
9       __analyzer_eval (i <= 4); /* { dg-warning "FALSE" } */
10       __analyzer_eval (i > 3); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
11       /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
12 
13       __analyzer_eval (i > 5); /* { dg-warning "UNKNOWN" } */
14       __analyzer_eval (i != 3); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
15       /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
16 
17       __analyzer_eval (i == 3); /* { dg-warning "FALSE" "desired" { xfail *-*-* } } */
18       /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
19 
20       __analyzer_eval (i != 4); /* { dg-warning "TRUE" } */
21       __analyzer_eval (i == 4); /* { dg-warning "FALSE" } */
22       __analyzer_eval (i == 5); /* { dg-warning "UNKNOWN" } */
23       __analyzer_eval (i != 5); /* { dg-warning "UNKNOWN" } */
24       __analyzer_eval (i < 5); /* { dg-warning "FALSE" } */
25       __analyzer_eval (i <= 5); /* { dg-warning "UNKNOWN" } */
26 
27       /* Tests of transitivity.  */
28       if (j < i)
29 	{
30 	  __analyzer_eval (j < i); /* { dg-warning "TRUE" } */
31 	  __analyzer_eval (j <= 4); /* { dg-warning "UNKNOWN" } */
32 	}
33       else
34 	{
35 	  __analyzer_eval (j >= i); /* { dg-warning "TRUE" } */
36 	  __analyzer_eval (j > 4); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
37 	  /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
38 	}
39     }
40   else
41     {
42       __analyzer_eval (i > 4); /* { dg-warning "FALSE" } */
43       __analyzer_eval (i <= 4); /* { dg-warning "TRUE" } */
44       __analyzer_eval (i > 3); /* { dg-warning "UNKNOWN" } */
45 
46       __analyzer_eval (i > 5); /* { dg-warning "FALSE" "desired" { xfail *-*-* } } */
47 	  /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
48       __analyzer_eval (i != 3); /* { dg-warning "UNKNOWN" } */
49 
50       __analyzer_eval (i == 3); /* { dg-warning "UNKNOWN" } */
51 
52       __analyzer_eval (i != 4); /* { dg-warning "UNKNOWN" } */
53       __analyzer_eval (i == 4); /* { dg-warning "UNKNOWN" } */
54       __analyzer_eval (i == 5); /* { dg-warning "FALSE" "desired" { xfail *-*-* } } */
55       /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
56       __analyzer_eval (i != 5); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
57       /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
58       __analyzer_eval (i < 5); /* { dg-warning "TRUE" } */
59       __analyzer_eval (i <= 5); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
60       /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
61     }
62 }
63 
test_2(int i,int j,int k)64 void test_2 (int i, int j, int k)
65 {
66   if (i >= j)
67     {
68       __analyzer_eval (i == k); /* { dg-warning "UNKNOWN" } */
69       if (j >= k)
70 	{
71 	  __analyzer_eval (i >= k); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
72 	  /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
73 	  __analyzer_eval (i == k); /* { dg-warning "UNKNOWN" } */
74 	  if (k >= i)
75 	    __analyzer_eval (i == k); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
76 	  /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
77 	}
78     }
79 }
80 
test_3(int flag,unsigned int i)81 void test_3 (int flag, unsigned int i)
82 {
83   if (!flag) {
84     return;
85   }
86 
87   __analyzer_eval (flag); /* { dg-warning "TRUE" } */
88 
89   if (i>0) {
90     __analyzer_eval (i > 0); /* { dg-warning "TRUE" } */
91     __analyzer_eval (flag); /* { dg-warning "TRUE" } */
92   } else {
93     __analyzer_eval (i <= 0); /* { dg-warning "TRUE" } */
94     __analyzer_eval (flag); /* { dg-warning "TRUE" } */
95   }
96 
97   __analyzer_eval (flag); /* { dg-warning "TRUE" } */
98 }
99 
test_range_int_gt_lt(int i)100 void test_range_int_gt_lt (int i)
101 {
102   if (i > 3)
103     if (i < 5)
104       __analyzer_eval (i == 4); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
105       /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
106 }
107 
test_range_float_gt_lt(float f)108 void test_range_float_gt_lt (float f)
109 {
110   if (f > 3)
111     if (f < 5)
112       __analyzer_eval (f == 4); /* { dg-warning "UNKNOWN" } */
113 }
114 
test_range_int_ge_lt(int i)115 void test_range_int_ge_lt (int i)
116 {
117   if (i >= 4)
118     if (i < 5)
119       __analyzer_eval (i == 4); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
120       /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
121 }
122 
test_range_float_ge_lt(float f)123 void test_range_float_ge_lt (float f)
124 {
125   if (f >= 4)
126     if (f < 5)
127       __analyzer_eval (f == 4); /* { dg-warning "UNKNOWN" } */
128 }
129 
test_range_int_gt_le(int i)130 void test_range_int_gt_le (int i)
131 {
132   if (i > 3)
133     if (i <= 4)
134       __analyzer_eval (i == 4); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
135       /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
136 }
137 
test_range_float_gt_le(float f)138 void test_range_float_gt_le (float f)
139 {
140   if (f > 3)
141     if (f <= 4)
142       __analyzer_eval (f == 4); /* { dg-warning "UNKNOWN" } */
143 }
144 
test_range_int_ge_le(int i)145 void test_range_int_ge_le (int i)
146 {
147   if (i >= 4)
148     if (i <= 4)
149       __analyzer_eval (i == 4); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
150       /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
151 }
152 
test_range_float_ge_le(float f)153 void test_range_float_ge_le (float f)
154 {
155   if (f >= 4)
156     if (f <= 4)
157       __analyzer_eval (f == 4); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
158       /* { dg-bogus "UNKNOWN" "status quo" { xfail *-*-* } .-1 } */
159 }
160 
test_float_selfcmp(float f)161 void test_float_selfcmp (float f)
162 {
163   __analyzer_eval (f == f); /* { dg-warning "UNKNOWN" } */
164   __analyzer_eval (f != f); /* { dg-warning "UNKNOWN" } */
165 }
166