https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71498
Martin Liška <marxin at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2016-06-13
CC| |marxin at gcc dot gnu.org
Ever confirmed|0 |1
--- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> ---
Problem is in function ubsan_walk_array_refs_r, where we skip all static
variables:
/* Since walk_tree doesn't call the callback function on the decls
in BIND_EXPR_VARS, we have to walk them manually. */
if (TREE_CODE (*tp) == BIND_EXPR)
{
for (tree decl = BIND_EXPR_VARS (*tp); decl; decl = DECL_CHAIN (decl))
{
if (TREE_STATIC (decl))
{
*walk_subtrees = 0;
continue;
}
where FUNCTION is a static var_decl:
(gdb) p debug_tree(decl)
<var_decl 0x7ffff7fedd80 FUNCTION
type <array_type 0x7ffff69e12a0
type <integer_type 0x7ffff68a6000 char readonly string-flag QI
size <integer_cst 0x7ffff6881d98 constant 8>
unit size <integer_cst 0x7ffff6881db0 constant 1>
align 8 symtab 0 alias set -1 canonical type 0x7ffff68a6000
precision 8 min <integer_cst 0x7ffff6881de0 -128> max <integer_cst
0x7ffff6881e10 127>
pointer_to_this <pointer_type 0x7ffff68a60a8>>
BLK
size <integer_cst 0x7ffff69c9798 constant 56>
unit size <integer_cst 0x7ffff69c9768 constant 7>
align 8 symtab 0 alias set -1 canonical type 0x7ffff69e12a0
domain <integer_type 0x7ffff69e1000 type <integer_type 0x7ffff68851f8
sizetype>
DI
size <integer_cst 0x7ffff6881ca8 constant 64>
unit size <integer_cst 0x7ffff6881cc0 constant 8>
align 64 symtab 0 alias set -1 canonical type 0x7ffff69e1000
precision 64 min <integer_cst 0x7ffff6881cd8 0> max <integer_cst 0x7ffff69c9750
6>>
pointer_to_this <pointer_type 0x7ffff69e1348>>
readonly addressable used static BLK file pr71498.c line 5 col 22 size
<integer_cst 0x7ffff69c9798 56> unit size <integer_cst 0x7ffff69c9768 7>
align 8 context <function_decl 0x7ffff69bea00 testje> initial <string_cst
0x7ffff69c8ca0>>
I'm wondering why are static vars skipped?