This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
misoptimization causing der_io.f90 failures
- From: Tobias Schlüter <tobias dot schlueter at physik dot uni-muenchen dot de>
- To: gcc at gcc dot gnu dot org, fortran at gcc dot gnu dot org
- Date: Sat, 15 May 2004 00:37:18 +0200
- Subject: 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