(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
analyzer/
unknown-fns-3.c
       1  /* Tests for handling constraints on results of unknown fns.  */
       2  
       3  #include <stddef.h>
       4  #include "analyzer-decls.h"
       5  
       6  void unknown_fn (void *);
       7  
       8  void test_1 (void)
       9  {
      10    int i;
      11    unknown_fn (&i);
      12    if (i)
      13      __analyzer_eval (i); /* { dg-warning "TRUE" } */
      14    else
      15      __analyzer_eval (i); /* { dg-warning "FALSE" } */
      16    __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
      17  }
      18  
      19  struct foo
      20  {
      21    int i;
      22    int j;
      23  };
      24  
      25  void test_2 (void)
      26  {
      27    struct foo f;
      28    unknown_fn (&f);
      29    if (f.j)
      30      __analyzer_eval (f.j); /* { dg-warning "TRUE" } */
      31    else
      32      __analyzer_eval (f.j); /* { dg-warning "FALSE" } */
      33    __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
      34  }
      35  
      36  void test_3 (int flag)
      37  {
      38    int i;
      39    unknown_fn (&i);
      40    if (i)
      41      {
      42        __analyzer_eval (i); /* { dg-warning "TRUE" } */
      43        if (flag)
      44  	__analyzer_eval (flag); /* { dg-warning "TRUE" } */
      45        else
      46  	__analyzer_eval (flag); /* { dg-warning "FALSE" } */
      47      }
      48    else
      49      __analyzer_eval (i); /* { dg-warning "FALSE" } */
      50    if (flag)
      51      __analyzer_eval (flag); /* { dg-warning "TRUE" } */
      52    else
      53      __analyzer_eval (flag); /* { dg-warning "FALSE" } */
      54    __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
      55  }
      56  
      57  void test_4 (int y)
      58  {
      59    int x;
      60    unknown_fn (&x);
      61    if (x)
      62      {
      63        __analyzer_eval (x); /* { dg-warning "TRUE" } */
      64        x = 0;
      65      }
      66    __analyzer_dump_exploded_nodes (0); /* { dg-warning "1 processed enode" } */
      67  }