[Bug middle-end/71907] [6/7 regression] missing buffer overflow warnings with -flto
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Jul 18 09:04:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71907
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |diagnostic, lto
Priority|P3 |P2
Status|UNCONFIRMED |ASSIGNED
Last reconfirmed| |2016-07-18
Component|lto |middle-end
Target Milestone|--- |6.2
Ever confirmed|0 |1
--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
With LTO we expand from
<bb 2>:
s = "12345678";
__builtin___memcpy_chk (&d, &s, 9, 4);
__builtin_puts (&d);
and we _do_ enter expand_builtin_memory_chk warning_at code. But the location
is completely bogus:
(gdb) p richloc
$11 = {static MAX_RANGES = 3, static MAX_FIXIT_HINTS = 2, m_num_ranges = 1,
m_ranges = {{m_loc = 2147483649, m_show_caret_p = true}, {m_loc = 32767,
m_show_caret_p = 144}, {m_loc = 32767, m_show_caret_p = 23}},
m_column_override = 0, m_have_expanded_location = false,
m_expanded_location = {
file = 0xc0ffffcc90 <error: Cannot access memory at address 0xc0ffffcc90>,
line = -12960, column = 32767, data = 0x7fffffffcd00, sysp = 96},
m_num_fixit_hints = 0, m_fixit_hints = {0x7fffffffccc0, 0x7fffffffcd00}}
in particular 'sysp' is not zero. Thus:
> gcc-6 t.c -O2 -D_FORTIFY_SOURCE=2 -flto -Wsystem-headers
In function ‘strcpy’,
inlined from ‘main’ at t.c:5:5:
/usr/include/bits/string3.h:104:10: warning: call to __builtin___memcpy_chk
will always overflow destination buffer
return __builtin___strcpy_chk (__dest, __src, __bos (__dest));
^
and viola, it works. This probably means tree_nonartificial_location doesn't
work correctly (anymore). I will have a closer look.
More information about the Gcc-bugs
mailing list