1  /* { dg-additional-options "-fno-analyzer-state-merge" } */
       2  
       3  #include "analyzer-decls.h"
       4  
       5  static void __analyzer_only_called_when_flag_a_true (int i)
       6  {
       7    __analyzer_eval (i == 42); /* { dg-warning "TRUE" } */
       8  }
       9  
      10  static void __analyzer_only_called_when_flag_b_true (int i)
      11  {
      12    __analyzer_eval (i == 17); /* { dg-warning "TRUE" } */
      13  }
      14  
      15  int test_1 (int flag_a, int flag_b)
      16  {
      17    int i = 17;
      18  
      19    __analyzer_eval (flag_a); /* { dg-warning "UNKNOWN" } */
      20    __analyzer_eval (flag_b); /* { dg-warning "UNKNOWN" } */
      21  
      22    if (flag_a)
      23      {
      24        __analyzer_eval (flag_a); /* { dg-warning "TRUE" } */
      25        __analyzer_eval (flag_b); /* { dg-warning "UNKNOWN" } */
      26        i = 42;
      27      }
      28  
      29    __analyzer_eval (flag_b); /* { dg-warning "UNKNOWN" } */
      30  
      31    if (flag_a)
      32      {
      33        __analyzer_eval (flag_a); /* { dg-warning "TRUE" } */
      34        __analyzer_eval (flag_b); /* { dg-warning "UNKNOWN" } */
      35        __analyzer_eval (i == 42); /* { dg-warning "TRUE" } */
      36        __analyzer_eval (i == 17); /* { dg-warning "FALSE" } */
      37        __analyzer_only_called_when_flag_a_true (i);
      38      }  
      39    else
      40      {
      41        __analyzer_eval (flag_a); /* { dg-warning "FALSE" } */
      42        __analyzer_eval (flag_b); /* { dg-warning "UNKNOWN" } */
      43        __analyzer_eval (i == 42); /* { dg-warning "FALSE" } */
      44        __analyzer_eval (i == 17); /* { dg-warning "TRUE" } */
      45        __analyzer_only_called_when_flag_b_true (i);
      46      }
      47  }