(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
analyzer/
out-of-bounds-read-char-arr.c
       1  char arr[10]; /* { dg-message "capacity: 10 bytes" } */
       2  
       3  char char_arr_read_element_before_start_far(void)
       4  {
       5    return arr[-100]; /* { dg-warning "buffer under-read" "warning" } */
       6    /* { dg-message "out-of-bounds read 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  char char_arr_read_element_before_start_near(void)
      11  {
      12    return arr[-2]; /* { dg-warning "buffer under-read" "warning" } */
      13    /* { dg-message "out-of-bounds read 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  char char_arr_read_element_before_start_off_by_one(void)
      18  {
      19    return arr[-1]; /* { dg-warning "buffer under-read" "warning" } */
      20    /* { dg-message "out-of-bounds read 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  char char_arr_read_element_at_start(void)
      25  {
      26    return arr[0];
      27  }
      28  
      29  char char_arr_read_element_at_end(void)
      30  {
      31    return arr[9];
      32  }
      33  
      34  char char_arr_read_element_after_end_off_by_one(void)
      35  {
      36    return arr[10]; /* { dg-warning "buffer over-read" "warning" } */
      37    /* { dg-message "out-of-bounds read at byte 10 but 'arr' ends at byte 10" "final event" { target *-*-* } .-1 } */
      38    /* { dg-message "read of 1 byte from after 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  char char_arr_read_element_after_end_near(void)
      43  {
      44    return arr[11]; /* { dg-warning "buffer over-read" "warning" } */
      45    /* { dg-message "out-of-bounds read at byte 11 but 'arr' ends at byte 10" "final event" { target *-*-* } .-1 } */
      46    /* { dg-message "read of 1 byte from after 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  char char_arr_read_element_after_end_far(void)
      51  {
      52    return arr[100]; /* { dg-warning "buffer over-read" "warning" } */
      53    /* { dg-message "out-of-bounds read at byte 100 but 'arr' ends at byte 10" "final event" { target *-*-* } .-1 } */
      54    /* { dg-message "read of 1 byte from after 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  }