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