Fortran: fix ICE in gfc_create_module_variable [PR100273]

gcc/fortran/ChangeLog:

	PR fortran/100273
	* trans-decl.cc (gfc_create_module_variable): Handle module
	variable also when it is needed for the result specification
	of a contained function.

gcc/testsuite/ChangeLog:

	PR fortran/100273
	* gfortran.dg/pr100273.f90: New test.
This commit is contained in:
Harald Anlauf 2024-09-05 21:30:25 +02:00
parent d9d34f9a91
commit 1f462b5072
2 changed files with 28 additions and 1 deletions

View file

@ -5540,7 +5540,8 @@ gfc_create_module_variable (gfc_symbol * sym)
/* Create the variable. */
pushdecl (decl);
gcc_assert (sym->ns->proc_name->attr.flavor == FL_MODULE
|| (sym->ns->parent->proc_name->attr.flavor == FL_MODULE
|| ((sym->ns->parent->proc_name->attr.flavor == FL_MODULE
|| sym->ns->parent->proc_name->attr.flavor == FL_PROCEDURE)
&& sym->fn_result_spec));
DECL_CONTEXT (decl) = sym->ns->proc_name->backend_decl;
rest_of_decl_compilation (decl, 1, 0);

View file

@ -0,0 +1,26 @@
! { dg-do compile }
! PR fortran/100273 - ICE in gfc_create_module_variable
!
! Contributed by G.Steinmetz
module m
implicit none
contains
character(4) function g(k)
integer :: k
g = f(k)
contains
function f(n)
character(3), parameter :: a(2) = ['1 ', '123']
integer :: n
character(len_trim(a(n))) :: f
f = 'abc'
end
end
end
program p
use m
implicit none
print *, '>>' // g(1) // '<<'
print *, '>>' // g(2) // '<<'
end