This is the mail archive of the gcc@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]

misoptimization causing der_io.f90 failures



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


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