https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93814

--- Comment #3 from kargl at gcc dot gnu.org ---
Patch is against svn r280157.

Index: gcc/fortran/resolve.c
===================================================================
--- gcc/fortran/resolve.c       (revision 280157)
+++ gcc/fortran/resolve.c       (working copy)
@@ -12230,9 +12230,26 @@ gfc_verify_binding_labels (gfc_symbol *sym)
       return;
     }

-  if ((sym->attr.function || sym->attr.subroutine)
-      && ((gsym->type != GSYM_SUBROUTINE && gsym->type != GSYM_FUNCTION)
-          || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY))
+  if (sym->attr.function
+      && (gsym->type != GSYM_FUNCTION
+         || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY))
+      && (sym != gsym->ns->proc_name)
+      && (module != gsym->mod_name
+         || strcmp (gsym->sym_name, sym->name) != 0
+         || (module && strcmp (module, gsym->mod_name) != 0)))
+    {
+      /* Print an error if the procedure is defined multiple times; we have to
+        exclude references to the same procedure via module association or
+        multiple checks for the same procedure.  */
+      gfc_error ("Procedure %qs with binding label %qs at %L uses the same "
+                "global identifier as entity at %L", sym->name,
+                sym->binding_label, &sym->declared_at, &gsym->where);
+      sym->binding_label = NULL;
+    }
+
+  if (sym->attr.subroutine
+      && (gsym->type != GSYM_SUBROUTINE
+         || (gsym->defined && sym->attr.if_source != IFSRC_IFBODY))
       && (sym != gsym->ns->proc_name && sym->attr.entry == 0)
       && (module != gsym->mod_name
          || strcmp (gsym->sym_name, sym->name) != 0

Reply via email to