Am 10.03.25 um 22:34 schrieb Harald Anlauf:
the patch looks basically fine but I cannot find the testcase.
You're right, here it is.
Best regards
Thomas
diff --git a/gcc/fortran/frontend-passes.cc b/gcc/fortran/frontend-passes.cc
index 20bf6e127ff..ef9c80147cc 100644
--- a/gcc/fortran/frontend-passes.cc
+++ b/gcc/fortran/frontend-passes.cc
@@ -5799,7 +5799,8 @@ check_against_globals (gfc_symbol *sym)
char buf [200];
if (sym->attr.if_source != IFSRC_IFBODY || sym->attr.flavor != FL_PROCEDURE
- || sym->attr.generic || sym->error)
+ || sym->attr.generic || sym->error || sym->attr.abstract
+ || sym->attr.dummy)
return;
if (sym->binding_label)
diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
index eda31ba8adc..027c99335d1 100644
--- a/gcc/fortran/resolve.cc
+++ b/gcc/fortran/resolve.cc
@@ -13883,7 +13883,8 @@ gfc_verify_DTIO_procedures (gfc_symbol *sym)
/* Verify that any binding labels used in a given namespace do not collide
with the names or binding labels of any global symbols. Multiple INTERFACE
- for the same procedure are permitted. */
+ for the same procedure are permitted. Abstract interfaces and dummy
+ arguments are not checked. */
static void
gfc_verify_binding_labels (gfc_symbol *sym)
@@ -13892,7 +13893,8 @@ gfc_verify_binding_labels (gfc_symbol *sym)
const char *module;
if (!sym || !sym->attr.is_bind_c || sym->attr.is_iso_c
- || sym->attr.flavor == FL_DERIVED || !sym->binding_label)
+ || sym->attr.flavor == FL_DERIVED || !sym->binding_label
+ || sym->attr.abstract || sym->attr.dummy)
return;
gsym = gfc_find_case_gsymbol (gfc_gsym_root, sym->binding_label);
diff --git a/gcc/testsuite/gfortran.dg/interface_58.f90
b/gcc/testsuite/gfortran.dg/interface_58.f90
new file mode 100644
index 00000000000..52f3651567f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/interface_58.f90
@@ -0,0 +1,38 @@
+! { dg-do compile }
+! PR 119078 - there should be no warning for dummy arguments
+! or abstract interfaces.
+module x
+ implicit none
+ abstract interface
+ subroutine foo() bind(c)
+ end subroutine foo
+ end interface
+ interface
+ subroutine baz() bind(c) ! { dg-warning "wrong number of arguments" }
+ end subroutine baz
+ end interface
+contains
+ subroutine tescht(bar) bind(c)
+ interface
+ subroutine bar() bind(c)
+ end subroutine bar
+ end interface
+ end subroutine tescht
+ subroutine t2(bar) bind(c)
+ procedure(foo) :: bar
+ end subroutine t2
+end module x
+
+subroutine foo(a)
+ real :: a
+end subroutine foo
+
+subroutine bar(b)
+ real :: b
+end subroutine bar
+
+subroutine baz(a) bind(c) ! { dg-warning "wrong number of arguments" }
+ use iso_c_binding, only : c_int
+ integer(c_int) :: a
+end subroutine baz
+