Fortran: do not generate conflicting results under -ff2c [PR104313]

gcc/fortran/ChangeLog:

	PR fortran/104313
	* trans-decl.cc (gfc_generate_return): Do not generate conflicting
	fake results for functions with no result variable under -ff2c.

gcc/testsuite/ChangeLog:

	PR fortran/104313
	* gfortran.dg/pr104313.f: New test.
This commit is contained in:
Steve Kargl 2022-07-15 22:07:15 +02:00 committed by Harald Anlauf
parent 9a15d3beac
commit 517fb1a781
2 changed files with 12 additions and 1 deletions

View File

@ -6474,7 +6474,7 @@ gfc_generate_return (void)
NULL_TREE, and a 'return' is generated without a variable.
The following generates a 'return __result_XXX' where XXX is
the function name. */
if (sym == sym->result && sym->attr.function)
if (sym == sym->result && sym->attr.function && !flag_f2c)
{
result = gfc_get_fake_result_decl (sym, 0);
result = fold_build2_loc (input_location, MODIFY_EXPR,

View File

@ -0,0 +1,11 @@
! { dg-do compile }
! { dg-additional-options "-ff2c -fdump-tree-original" }
!
! PR fortran/104313 - ICE verify_gimple failed with -ff2c
! Contributed by G.Steinmetz
function f(a)
return
end
! { dg-final { scan-tree-dump-times "return" 1 "original" } }