(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
analyzer/
symbolic-7.c
       1  #include "analyzer-decls.h"
       2  
       3  extern void maybe_write (int *);
       4  
       5  void test_1 (int i)
       6  {
       7    /* An array with purely concrete bindings.  */
       8    int arr[2];
       9    arr[0] = 1066;
      10    arr[1] = 1776;
      11  
      12    /* Concrete reads.  */
      13    __analyzer_eval (arr[0] == 1066); /* { dg-warning "TRUE" } */
      14    __analyzer_eval (arr[1] == 1776); /* { dg-warning "TRUE" } */
      15  
      16    /* Symbolic read.  */
      17    __analyzer_describe (0, arr[i]); /* { dg-warning "svalue: 'UNKNOWN\\(int\\)'" } */
      18    __analyzer_eval (arr[i] == 1776); /* { dg-warning "UNKNOWN" } */
      19  }
      20  
      21  void test_2 (int i)
      22  {
      23    /* An array that could have been touched.  */
      24    int arr[2];
      25    maybe_write (arr);
      26    
      27    /* Concrete reads.  */
      28    __analyzer_eval (arr[0] == 42); /* { dg-warning "UNKNOWN" } */
      29  
      30    /* Symbolic read.  */
      31    __analyzer_eval (arr[i] == 42); /* { dg-warning "UNKNOWN" } */
      32  }
      33  
      34  void test_3_concrete_read (int i)
      35  {
      36    /* An array that can't have been touched.  */
      37    int arr[2];
      38    
      39    /* Concrete reads.  */
      40    __analyzer_eval (arr[0] == 42); /* { dg-warning "use of uninitialized value 'arr\\\[0\\\]'" } */
      41  }
      42  
      43  void test_3_symbolic_read (int i)
      44  {
      45    /* An array that can't have been touched.  */
      46    int arr[2];
      47    
      48    /* Symbolic read.  */
      49    __analyzer_eval (arr[i] == 42); /* { dg-warning "use of uninitialized value 'arr\\\[i\\\]'" } */
      50  }