[Bug tree-optimization/53426] [4.8 Regression] ICE:create_variable_info_for at ../../gcc-trunk/gcc/tree-ssa-structalias.c:5581
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Tue May 22 12:48:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53426
--- Comment #7 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-05-22 12:47:04 UTC ---
(In reply to comment #6)
> > by changing it to
> >
> > if (!vnode
> > || DECL_INITIAL (vnode) == error_mark_node
> > || !varpool_all_refs_explicit_p (vnode))
> > make_copy_constraint (vi, nonlocal_id);
> >
> > also noting the special error_mark_node DECL_INITIAL (what's that coming
> > from!?)
>
> DECL_INITIAL is replaced by error mark when the variable is removed from
> varpool
> (so we know it is no longer going to be referenced or emit in some way) to
> conserve
> memory.
>
> Other case is the partitioning, when the variable is in the other partition
> and thus there is no need to sream the DECL_INITIAL (we stream DECL_INITIAL for
> variables from other partitions only when we think it may be useful for
> constant
> folding: that is variables passes const_value_known_p). This is probably the
> case
> here.
>
> If you only need to collect all things that escape, you can safely ignore
> DECL_INITIAL of DECLs with in_ohter_partition set: all vars that are in current
> partition referenced by the constructor from other partition
> "used_from_other_partition" set anyway, so they won't pass
> varpool_all_refs_explicit_p.
>
> You only need to worry about local constructors.
But I have a variable that fulfills varpool_all_refs_explicit_p but still
its DECL_INITIAL contains &X where I have no varpool node for X for. So
if I constant fold from it I can get an explicit reference to a global
variable X that has no varpool node assigned. How can that be ok?
More information about the Gcc-bugs
mailing list