[Bug middle-end/57649] New: [4.7 Regression] ICE in set_is_used
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Jun 19 09:33:00 GMT 2013
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57649
Bug ID: 57649
Summary: [4.7 Regression] ICE in set_is_used
Product: gcc
Version: 4.7.3
Status: UNCONFIRMED
Keywords: ice-on-valid-code
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: jakub at gcc dot gnu.org
CC: matz at gcc dot gnu.org
void bar (const char *);
void
foo ()
{
static const char *s = __PRETTY_FUNCTION__;
struct T { T () { bar (s); } } t;
}
ICEs at -O2 starting with r179618 on 4.7 branch, went away with r187719 for
4.8+.
Similarly C -O2:
void bar (const char *);
void
foo (void)
{
static const char *s = __PRETTY_FUNCTION__;
auto void baz (void) { bar (s); }
baz ();
}
The problem is that the s variable isn't referenced in foo during
*referenced_vars pass, is referenced in another function (nested or local class
method), but at that point the DECL_INITIAL of the var isn't marked, and later
on when the nested/local class method is inlined nothing marks the
DECL_INITIAL.
Perhaps the inliner should somewhere go through all gimple_referenced_vars of
the callee and for each TREE_STATIC var with DECL_CONTEXT of the caller just
call add_referenced_var?
More information about the Gcc-bugs
mailing list