PR fortran/89574 - ICE in conv_function_val, at fortran/trans-expr.c:3792

When checking for an external procedure from the same file, do not
consider symbols from different modules.

gcc/fortran/
	PR fortran/89574
	* trans-decl.c (gfc_get_extern_function_decl): Check whether a
	symbol belongs to a different module.
This commit is contained in:
Harald Anlauf 2020-07-21 21:37:30 +02:00
parent 02363d5fdb
commit 28f2a080cc
2 changed files with 35 additions and 1 deletions

View File

@ -2090,12 +2090,17 @@ gfc_get_extern_function_decl (gfc_symbol * sym, gfc_actual_arglist *actual_args)
if (gsym && !gsym->bind_c)
gsym = NULL;
}
else
else if (sym->module == NULL)
{
gsym = gfc_find_gsymbol (gfc_gsym_root, sym->name);
if (gsym && gsym->bind_c)
gsym = NULL;
}
else
{
/* Procedure from a different module. */
gsym = NULL;
}
if (gsym && !gsym->defined)
gsym = NULL;

View File

@ -0,0 +1,29 @@
! { dg-do compile }
! PR fortran/89574 - ICE in conv_function_val, at fortran/trans-expr.c:3792
module mod1
contains
subroutine init
end subroutine
end module
module mod2
contains
subroutine init
end subroutine
end module
module init
use mod1, only : test_init1 => init
use mod2, only : test_init2 => init
implicit none
contains
subroutine sub
call test_init1
call test_init2
call init
contains
subroutine init
end subroutine
end subroutine
end module