aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/frontend-passes.cc
diff options
context:
space:
mode:
authorHarald Anlauf <anlauf@gmx.de>2025-01-26 22:56:57 +0100
committerHarald Anlauf <anlauf@gmx.de>2025-01-27 18:53:36 +0100
commit9104472b645f76a212af9f9c58378500f9ba937e (patch)
tree47a3552680c0180cdf3328aef26927dd27817256 /gcc/fortran/frontend-passes.cc
parent9d450dee7112635a541c5a34268d54f63da48f71 (diff)
downloadgcc-9104472b645f76a212af9f9c58378500f9ba937e.zip
gcc-9104472b645f76a212af9f9c58378500f9ba937e.tar.gz
gcc-9104472b645f76a212af9f9c58378500f9ba937e.tar.bz2
Fortran: fix bogus diagnostics on renamed interface import [PR110993]
PR fortran/110993 gcc/fortran/ChangeLog: * frontend-passes.cc (check_externals_procedure): Do not compare interfaces of a non-bind(C) procedure against a bind(C) global one. (check_against_globals): Use local name from rename-on-use in the search for interfaces. gcc/testsuite/ChangeLog: * gfortran.dg/use_rename_14.f90: New test.
Diffstat (limited to 'gcc/fortran/frontend-passes.cc')
-rw-r--r--gcc/fortran/frontend-passes.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/fortran/frontend-passes.cc b/gcc/fortran/frontend-passes.cc
index 9872387..6b470b8 100644
--- a/gcc/fortran/frontend-passes.cc
+++ b/gcc/fortran/frontend-passes.cc
@@ -5704,6 +5704,9 @@ check_externals_procedure (gfc_symbol *sym, locus *loc,
if (gsym->ns)
gfc_find_symbol (sym->name, gsym->ns, 0, &def_sym);
+ if (gsym->bind_c && def_sym && def_sym->binding_label == NULL)
+ return 0;
+
if (def_sym)
{
gfc_compare_actual_formal (&actual, def_sym->formal, 0, 0, 0, loc);
@@ -5800,6 +5803,10 @@ check_against_globals (gfc_symbol *sym)
if (sym->binding_label)
sym_name = sym->binding_label;
+ else if (sym->attr.use_rename
+ && sym->ns->use_stmts->rename
+ && sym->ns->use_stmts->rename->local_name[0] != '\0')
+ sym_name = sym->ns->use_stmts->rename->local_name;
else
sym_name = sym->name;