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:
parent
d9d34f9a91
commit
1f462b5072
2 changed files with 28 additions and 1 deletions
|
@ -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);
|
||||
|
|
26
gcc/testsuite/gfortran.dg/pr100273.f90
Normal file
26
gcc/testsuite/gfortran.dg/pr100273.f90
Normal 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
|
Loading…
Add table
Reference in a new issue