[Bug middle-end/63186] [4.9/5 Regression] Undefined .L* symbols because of fnsplit
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Sep 5 21:39:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63186
--- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
For the case when any of the bbs considered for being split (into
function.part.N) refers to a label which is defined in one of the basic blocks
that are not considered for split we already kind of have code to handle that,
the DECL_UID of the label is put into non_ssa_vars bitmap and then
verify_non_ssa_vars is called which if it sees a GIMPLE_LABEL with a label set
in non_ssa_vars bitmap will give up. Unfortunately, verify_non_ssa_vars
doesn't walk all basic blocks that aren't being split off, but only those that
can be executed before reaching the split entry_bb. In the testcase the label
is in a basic block that just returns afterwards. So perhaps we'd need to
remember if we put any LABEL_DECL uids into non_ssa_vars bitmap and if yes, in
addition to what non_ssa_vars does right now also walk all other basic blocks
that would not be split away (just the labels at the start of each) and just
handle GIMPLE_LABELs for those. Or do that always.
Not sure what is supposed to handle the case when a label anywhere in the
split_bbs would be referenced from the header basic blocks though.
More information about the Gcc-bugs
mailing list