1 /* { dg-additional-options "-fno-analyzer-state-purge" } */
2
3 #include "analyzer-decls.h"
4
test(void)5 void test(void)
6 {
7 int i;
8
9 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
10
11 for (i=0; i<256; i++) {
12 __analyzer_eval (i < 256); /* { dg-warning "TRUE" } */
13 /* (should report TRUE twice). */
14
15 __analyzer_eval (i == 0); /* { dg-warning "TRUE" "1st" } */
16 /* { dg-warning "FALSE" "2nd" { xfail *-*-* } .-1 } */
17 /* { dg-warning "UNKNOWN" "status quo" { target *-*-* } .-2 } */
18 /* TODO(xfail^^^): ideally we ought to figure out i > 0 after 1st iteration. */
19
20 __analyzer_eval (i >= 0); /* { dg-warning "TRUE" "1st" } */
21 /* { dg-warning "TRUE" "2nd" { xfail *-*-* } } */
22 /* { dg-warning "UNKNOWN" "status quo" { target *-*-* } .-2 } */
23 /* TODO(xfail^^^): ideally we ought to figure out i >= 0 for all iterations. */
24
25 __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
26 }
27
28 __analyzer_eval (i >= 256); /* { dg-warning "TRUE" } */
29
30 __analyzer_eval (i == 256); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
31 /* { dg-warning "UNKNOWN" "status quo" { target *-*-* } .-1 } */
32 /* TODO(xfail^^^): it only figures out i >= 256, rather than i == 256. */
33
34 __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
35 }
36