https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109437

            Bug ID: 109437
           Summary: -Wanalyzer-out-of-bounds is emitted at most once per
                    frame.
           Product: gcc
           Version: 13.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: analyzer
          Assignee: dmalcolm at gcc dot gnu.org
          Reporter: priour.be at gmail dot com
                CC: priour.be at gmail dot com
  Target Milestone: ---
             Build: 13.0.1 20230328 (experimental)

OOB refers to Out-Of-Bounds.

Curiously, it seems that if a frame was a cause for a OOB (either by containing
the spurious code or by being a caller to such code), it will only emit one set
of warning, rather than at each unique compromising statements.


int consecutive_oob_in_frame ()
{
    int arr[] = {1,2,3,4,5,6,7};
    int y1 = arr[9]; // only  this one is diagnosed
    int y2 = arr[10]; // no OOB warning emitted here ...
    int y3 = arr[50]; // ... nor here.
    return (y1+y2+y3);
}

int main () {
    consecutive_oob_in_frame (); // OOB warning emitted
    int x [] = {1,2};
    x[5]; /* silent, probably because another set of OOB warnings
    has already been issued with this frame being the source */
    return 0;
}


As per David suggestion, it might be worth to implement
pending_diagnostic::supercedes_p vfunc for the OOB checker.

Reply via email to