misoptimization causing der_io.f90 failures

Tobias Schlüter tobias.schlueter@physik.uni-muenchen.de
Fri May 14 22:37:00 GMT 2004


I've been looking into the failure of the Fortran test 
execute/der_io.f90 at optimization levels -O2 and higher. To my naive 
eys this seems to be a misoptimization when inlining a nested function.

Witness:
[tobi@marktplatz tests]$ cat derio.f90
  print *,bar() ! should print 1024
  contains
    integer function bar()
      bar = 1024
    end function
  end
[tobi@marktplatz tests]$ gfortran derio.f90 -O2 -g -funit-at-a-time
[tobi@marktplatz tests]$ ./a.out
      2301916
[tobi@marktplatz tests]$ gfortran derio.f90 -O2 -g -fno-unit-at-a-time
[tobi@marktplatz tests]$ ./a.out
         1024
[tobi@marktplatz tests]$
This certainly is not intended.

Looking thorugh the tree dumps it seems that this already fails when 
lowering to gimple:
[tobi@marktplatz tests]$ cat derio.f90.t05.nested
 ... a dump which looks correct  ...
[tobi@marktplatz tests]$ cat derio.f90.t10.gimple

;; Function MAIN__ (MAIN__)

MAIN__ ()
{
  int4 retval.1;
  register static  bar;
  _gfortran_filename = "derio.f90";
  _gfortran_line = 1;
  _gfortran_ioparm.unit = 6;
  _gfortran_ioparm.list_format = 1;
  _gfortran_st_write ();
  {
    int4 T.0;
    {
      int4 <D430>;
      {
        int4 __result_bar;
        __result_bar = 1024;
      }
      <D429>:;
      retval.1 = <D430>;  // <<<<---- why not "= __result_bar;"?
    }
    T.0 = retval.1;
    _gfortran_transfer_integer (&T.0, 4);
  }
  _gfortran_st_write_done ();
}
[tobi@marktplatz tests]$

Should I file a PR? It didn't seem to be the right thing, as the 
testsuite keeps reminding us of that failure anyway.

- Tobi




More information about the Gcc mailing list