diff options
author | Harald Anlauf <anlauf@gmx.de> | 2025-01-26 22:56:57 +0100 |
---|---|---|
committer | Harald Anlauf <anlauf@gmx.de> | 2025-01-27 18:53:36 +0100 |
commit | 9104472b645f76a212af9f9c58378500f9ba937e (patch) | |
tree | 47a3552680c0180cdf3328aef26927dd27817256 /gcc | |
parent | 9d450dee7112635a541c5a34268d54f63da48f71 (diff) | |
download | gcc-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')
-rw-r--r-- | gcc/fortran/frontend-passes.cc | 7 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/use_rename_14.f90 | 46 |
2 files changed, 53 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; diff --git a/gcc/testsuite/gfortran.dg/use_rename_14.f90 b/gcc/testsuite/gfortran.dg/use_rename_14.f90 new file mode 100644 index 0000000..03815a5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/use_rename_14.f90 @@ -0,0 +1,46 @@ +! { dg-do compile } +! +! PR fortran/110993 - bogus diagnostics on renamed interface import +! +! Contributed by Rimvydas Jasinskas <rimvydas.jas at gmail.com> + +module m + interface + subroutine bar(x) + use iso_c_binding, only : c_float + implicit none + real(c_float) :: x(45) + end subroutine + end interface +end + +module m1 + interface + subroutine bar1(x) bind(c) + use iso_c_binding, only : c_float + implicit none + real(c_float) :: x(45) + end subroutine + end interface +end + +module m2 + interface + subroutine bar2(x) bind(c, name="bar2_") + use iso_c_binding, only : c_float + implicit none + real(c_float) :: x(45) + end subroutine + end interface +end + +subroutine foo(y) + use m, notthisone => bar + use m1, northisone => bar1 + use m2, orthisone => bar2 + implicit none + real :: y(3) + call bar (y) + call bar1(y) + call bar2(y) +end subroutine |