See a fortran program:
$ cat t.f
      integer nz
      assign 93 to nz
      go to nz,(93)
  93  continue
      end
$ gfortran -v
Target: ia64-unknown-linux-gnu
Configured with: ../gcc/configure --enable-languages=c,f95 --
prefix=/home/wf/loc
al
Thread model: posix
gcc version 4.1.0 20050704 (experimental)
$ gfortran -O0 -w t.f
$ ./a.out
That's correct.

But if we compile with -O1 or higher, we get 
$ ./a.out
Fortran runtime error: Assigned label is not in the list

We dump the original tree with -fdump-tree-original as follows:
MAIN__ ()
{
  int4 nz;
  void * nz.1;
  int4 nz.0 = -2;

  nz.0 = -1;
  nz.1 = &__label_000093;
  if (__builtin_expect (nz.0 != -1, 0))
    {
      _gfortran_runtime_error ("Assigned label is not a target 
label", "kgfm2.f"
, 5);
    }
  else
    {
      (void) 0;
    }
  if (&__label_000093 == nz.1) goto __label_000093; else (void) 0;
  _gfortran_runtime_error ("Assigned label is not in the list", "kgfm2.f", 5);
  __label_000093:;
}
That's correct.

I think this is tree-optimization error. Tested on ia64/i686-pc-linux.

-- 
           Summary: Optimize Assigned GOTO to cause error with -O1 or higher
           Product: gcc
           Version: 4.1.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: tree-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: fengwang at gcc dot gnu dot org
                CC: gcc-bugs at gcc dot gnu dot org
  GCC host triplet: i686/ia64-pc-linux


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22290

Reply via email to