This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/63186] New: [4.9/5 Regression] Undefined .L* symbols because of fnsplit
- From: "jakub at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Fri, 05 Sep 2014 13:18:55 +0000
- Subject: [Bug middle-end/63186] New: [4.9/5 Regression] Undefined .L* symbols because of fnsplit
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63186
Bug ID: 63186
Summary: [4.9/5 Regression] Undefined .L* symbols because of
fnsplit
Product: gcc
Version: 4.9.1
Status: UNCONFIRMED
Keywords: wrong-code
Severity: normal
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: jakub at gcc dot gnu.org
CC: hubicka at gcc dot gnu.org
Starting with r202185 the following testcase is compiled with undefined .L*
symbols at -O2:
void *a;
int b, c, d;
void
bar ()
{
switch (c)
{
case 0:
lab:
__asm__ ("");
return;
default:
break;
}
b = 0;
d = 0;
a = &&lab;
}
void
foo ()
{
bar ();
}
The problem is that find_split_points (visit_bb, something else?) doesn't
consider GIMPLE_LABEL stmts with FORCED_LABEL. Either blocks with such labels
should be immediately marked as inappropriate to stay in the caller part (i.e.
non-fn.part.N), or we need to analyze whether nothing that would be moved to
the fn.part.N function references labels that stay in fn. Perhaps the other
direction can be a problem too. Honza, can you please have a look?