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
+  

Reply via email to