1  /* { dg-additional-options "-fno-analyzer-state-purge" } */
       2  #include "analyzer-decls.h"
       3  
       4  struct s
       5  {
       6    int i;
       7  };
       8  
       9  void test(void)
      10  {
      11    struct s s;
      12  
      13    __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
      14  
      15  
      16    for (s.i=0; s.i<256; s.i++) {
      17      __analyzer_eval (s.i < 256); /* { dg-warning "TRUE" } */
      18        /* (should report TRUE twice). */
      19  
      20      __analyzer_dump_exploded_nodes (0); /* { dg-warning "2 processed enodes" } */
      21  
      22      //__analyzer_eval (s.i == 0); /* { d-todo-g-warning "UNKNOWN" "" { xfail *-*-* } } */
      23        /* { d-todo-g-warning "TRUE" "" { target *-*-* } .-1 } */
      24        /* TODO(xfail^^^): we're only capturing the first iteration, so
      25  	 we erroneously get i == 0.  */
      26  
      27        //__analyzer_eval (s.i >= 0); /* { d-todo-g-warning "TRUE" } */
      28    }
      29  
      30    __analyzer_eval (s.i >= 256); /* { dg-warning "TRUE" } */
      31  
      32    __analyzer_eval (s.i == 256); /* { dg-warning "TRUE" "desired" { xfail *-*-* } } */
      33    /* { dg-warning "UNKNOWN" "status quo" { target *-*-* } .-1 } */
      34    /* TODO(xfail^^^): ideally it should figure out i == 256 at exit.  */
      35  
      36    __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
      37  }