(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
analyzer/
clobbers-2.c
       1  #include "analyzer-decls.h"
       2  
       3  typedef __SIZE_TYPE__ size_t;
       4  extern void bzero (void *s, size_t n);
       5  extern void *memset(void *s, int c, size_t n);
       6  
       7  void test_1 (void)
       8  {
       9    char arr[16];
      10    bzero (arr, sizeof (arr));
      11    __analyzer_eval (arr[0] == 0); /* { dg-warning "TRUE" } */
      12    __analyzer_eval (arr[7] == 0); /* { dg-warning "TRUE" } */
      13    __analyzer_eval (arr[8] == 0); /* { dg-warning "TRUE" } */
      14    __analyzer_eval (arr[9] == 0); /* { dg-warning "TRUE" } */
      15    __analyzer_eval (arr[15] == 0); /* { dg-warning "TRUE" } */
      16  
      17    /* Clobber in the middle (with prefix and suffix).  */
      18    arr[8] = 42;
      19    __analyzer_eval (arr[0] == 0); /* { dg-warning "TRUE" } */
      20    __analyzer_eval (arr[7] == 0); /* { dg-warning "TRUE" } */
      21    __analyzer_eval (arr[8] == 0); /* { dg-warning "FALSE" } */
      22    __analyzer_eval (arr[8] == 42); /* { dg-warning "TRUE" } */
      23    __analyzer_eval (arr[9] == 0); /* { dg-warning "TRUE" } */
      24    __analyzer_eval (arr[15] == 0); /* { dg-warning "TRUE" } */
      25  }
      26  
      27  void test_2 (void)
      28  {
      29    char arr[16];
      30    bzero (arr, sizeof (arr));
      31    __analyzer_eval (arr[0] == 0); /* { dg-warning "TRUE" } */
      32    __analyzer_eval (arr[1] == 0); /* { dg-warning "TRUE" } */
      33    __analyzer_eval (arr[15] == 0); /* { dg-warning "TRUE" } */
      34  
      35    /* Clobber at the front (suffix, but no prefix).  */
      36    arr[0] = 42;
      37    __analyzer_eval (arr[0] == 0); /* { dg-warning "FALSE" } */
      38    __analyzer_eval (arr[0] == 42); /* { dg-warning "TRUE" } */
      39    __analyzer_eval (arr[1] == 0); /* { dg-warning "TRUE" } */
      40    __analyzer_eval (arr[15] == 0); /* { dg-warning "TRUE" } */
      41  }
      42  
      43  void test_3 (void)
      44  {
      45    char arr[16];
      46    bzero (arr, sizeof (arr));
      47    __analyzer_eval (arr[0] == 0); /* { dg-warning "TRUE" } */
      48    __analyzer_eval (arr[14] == 0); /* { dg-warning "TRUE" } */
      49    __analyzer_eval (arr[15] == 0); /* { dg-warning "TRUE" } */
      50  
      51    /* Clobber at the end (prefix, but no suffix).  */
      52    arr[15] = 42;
      53    __analyzer_eval (arr[0] == 0); /* { dg-warning "TRUE" } */
      54    __analyzer_eval (arr[14] == 0); /* { dg-warning "TRUE" } */
      55    __analyzer_eval (arr[15] == 0); /* { dg-warning "FALSE" } */
      56    __analyzer_eval (arr[15] == 42); /* { dg-warning "TRUE" } */
      57  }
      58  
      59  void test_4 (void)
      60  {
      61    char arr[16];
      62    bzero (arr, sizeof (arr));
      63    __analyzer_eval (arr[0] == 0); /* { dg-warning "TRUE" } */
      64    __analyzer_eval (arr[15] == 0); /* { dg-warning "TRUE" } */
      65  
      66    /* Exact overlap, no prefix or suffix.  */
      67    memset (arr, 1, 16);
      68    __analyzer_eval (arr[0] == 0); /* { dg-warning "FALSE" } */
      69    __analyzer_eval (arr[15] == 0); /* { dg-warning "FALSE" } */
      70    __analyzer_eval (arr[0] == 1); /* { dg-warning "TRUE" } */
      71    __analyzer_eval (arr[15] == 1); /* { dg-warning "TRUE" } */
      72  }