[Bug tree-optimization/85420] missing -Wrestrict with -fsanitize=undefined
msebor at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Apr 16 17:29:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85420
Martin Sebor <msebor at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2018-04-16
CC| |msebor at gcc dot gnu.org
Component|middle-end |tree-optimization
Summary|More -Wrestrict false |missing -Wrestrict with
|positives with |-fsanitize=undefined
|-fsanitize=undefined |
Ever confirmed|0 |1
--- Comment #5 from Martin Sebor <msebor at gcc dot gnu.org> ---
The warning for attachment 43950 is intended and the bug is actually in failing
to issue it without -fsanitize=undefined. Unlike for raw memory functions such
as memcpy, for string functions like strcpy -Wrestrict triggers even for
possible overlaps. I.e., copying a substring of the same array is designed to
warn whether or not the overlap is certain, as in:
char a[32];
void f (int i)
{
__builtin_strcpy (a, a + i); // -Wrestrict expected here
}
This doesn't work completely consistently -- e.g., the above won't warn if a is
changed to a pointer -- but the basic idea is that strcpy is too
"unpredictable" to be safely used to copy substrings within the same array. So
confirming for the missing warning.
The warning in attachment 43951 looks like a different bug in -Wrestrict: it
doesn't consider the sizes of the two array members and so it doesn't
distinguish between them. Let me open a separate report for this.
More information about the Gcc-bugs
mailing list