(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
analyzer/
out-of-bounds-write-char-arr.c
       1  char arr[10]; /* { dg-message "capacity: 10 bytes" } */
       2  
       3  void char_arr_write_element_before_start_far(char x)
       4  {
       5    arr[-100] = x; /* { dg-warning "buffer underwrite" "warning" } */
       6    /* { dg-message "out-of-bounds write at byte -100 but 'arr' starts at byte 0" "final event" { target *-*-* } .-1 } */
       7    /* { dg-message "valid subscripts for 'arr' are '\\\[0\\\]' to '\\\[9\\\]'" "valid subscript note" { target *-*-* } .-2 } */
       8  }
       9  
      10  void char_arr_write_element_before_start_near(char x)
      11  {
      12    arr[-2] = x; /* { dg-warning "buffer underwrite" "warning" } */
      13    /* { dg-message "out-of-bounds write at byte -2 but 'arr' starts at byte 0" "final event" { target *-*-* } .-1 } */
      14    /* { dg-message "valid subscripts for 'arr' are '\\\[0\\\]' to '\\\[9\\\]'" "valid subscript note" { target *-*-* } .-2 } */
      15  }
      16  
      17  void char_arr_write_element_before_start_off_by_one(char x)
      18  {
      19    arr[-1] = x; /* { dg-warning "buffer underwrite" "warning" } */
      20    /* { dg-message "out-of-bounds write at byte -1 but 'arr' starts at byte 0" "final event" { target *-*-* } .-1 } */
      21    /* { dg-message "valid subscripts for 'arr' are '\\\[0\\\]' to '\\\[9\\\]'" "valid subscript note" { target *-*-* } .-2 } */
      22  }
      23  
      24  void char_arr_write_element_at_start(char x)
      25  {
      26    arr[0] = x;
      27  }
      28  
      29  void char_arr_write_element_at_end(char x)
      30  {
      31    arr[9] = x;
      32  }
      33  
      34  void char_arr_write_element_after_end_off_by_one(char x)
      35  {
      36    arr[10] = x; /* { dg-warning "buffer overflow" "warning" } */
      37    /* { dg-message "out-of-bounds write at byte 10 but 'arr' ends at byte 10" "final event" { target *-*-* } .-1 } */
      38    /* { dg-message "write of 1 byte to beyond the end of 'arr'" "num bad bytes note" { target *-*-* } .-2 } */
      39    /* { dg-message "valid subscripts for 'arr' are '\\\[0\\\]' to '\\\[9\\\]'" "valid subscript note" { target *-*-* } .-3 } */
      40  }
      41  
      42  void char_arr_write_element_after_end_near(char x)
      43  {
      44    arr[11] = x; /* { dg-warning "buffer overflow" "warning" } */
      45    /* { dg-message "out-of-bounds write at byte 11 but 'arr' ends at byte 10" "final event" { target *-*-* } .-1 } */
      46    /* { dg-message "write of 1 byte to beyond the end of 'arr'" "num bad bytes note" { target *-*-* } .-2 } */
      47    /* { dg-message "valid subscripts for 'arr' are '\\\[0\\\]' to '\\\[9\\\]'" "valid subscript note" { target *-*-* } .-3 } */
      48  }
      49  
      50  void char_arr_write_element_after_end_far(char x)
      51  {
      52    arr[100] = x; /* { dg-warning "buffer overflow" "warning" } */
      53    /* { dg-message "out-of-bounds write at byte 100 but 'arr' ends at byte 10" "final event" { target *-*-* } .-1 } */
      54    /* { dg-message "write of 1 byte to beyond the end of 'arr'" "num bad bytes note" { target *-*-* } .-2 } */
      55    /* { dg-message "valid subscripts for 'arr' are '\\\[0\\\]' to '\\\[9\\\]'" "valid subscript note" { target *-*-* } .-3 } */
      56  }