aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/interface.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/interface.c')
-rw-r--r--gcc/fortran/interface.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c
index 1a5485e..8ec0b92 100644
--- a/gcc/fortran/interface.c
+++ b/gcc/fortran/interface.c
@@ -1016,6 +1016,11 @@ check_sym_interfaces (gfc_symbol * sym)
if (sym->ns != gfc_current_ns)
return;
+ if (sym->attr.if_source == IFSRC_IFBODY
+ && sym->attr.flavor == FL_PROCEDURE
+ && !sym->attr.mod_proc)
+ resolve_global_procedure (sym, &sym->declared_at, sym->attr.subroutine);
+
if (sym->generic != NULL)
{
sprintf (interface_name, "generic interface '%s'", sym->name);
@@ -1371,16 +1376,10 @@ compare_actual_formal (gfc_actual_arglist ** ap,
&& a->expr->expr_type == EXPR_VARIABLE
&& f->sym->attr.flavor == FL_PROCEDURE)
{
- gsym = gfc_find_gsymbol (gfc_gsym_root,
- a->expr->symtree->n.sym->name);
- if (gsym == NULL || (gsym->type != GSYM_FUNCTION
- && gsym->type != GSYM_SUBROUTINE))
- {
- if (where)
- gfc_error ("Expected a procedure for argument '%s' at %L",
- f->sym->name, &a->expr->where);
- return 0;
- }
+ if (where)
+ gfc_error ("Expected a procedure for argument '%s' at %L",
+ f->sym->name, &a->expr->where);
+ return 0;
}
if (f->sym->attr.flavor == FL_PROCEDURE