[Bug tree-optimization/82612] missing -Warray-bounds on a non-zero offset from the address of a non-array object
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Oct 19 07:19:00 GMT 2017
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.
More information about the Gcc-bugs
mailing list