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

--- Comment #1 from Richard Biener <rguenth at gcc dot gnu.org> ---
But we are not even having an ARRAY_REF in the IL ...

So try

int g (int i)
{
  int (*p)[2] = (int (*)[2])&i;

  return (*p)[2];
}

where we also do not warn.  Or the VLA variant:

int g (int i, int n)
{
  int (*p)[n] = (int (*)[n])&i;

  return (*p)[2];
}

Basically the warning code blindly trusts the ARRAY_TYPE domain even if
there's an underlying decl where that array wouldn't fit.  So the warning
you are requesting is more an out-of-bound object access in general.

To warn for this substitute each variable offset with its minimum range
value, call get_ref_base_and_extent and see if offset/size are within
the base object.

Reply via email to