This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug middle-end/63186] New: [4.9/5 Regression] Undefined .L* symbols because of fnsplit


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?


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]