re PR fortran/40453 ([F95] Enhanced (recursive) argument checking)
authorJanus Weil <janus@gcc.gnu.org>
Fri, 12 Oct 2012 08:16:17 +0000 (10:16 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Fri, 12 Oct 2012 08:16:17 +0000 (10:16 +0200)
2012-10-12  Janus Weil  <janus@gcc.gnu.org>

PR fortran/40453
* interface.c (check_dummy_characteristics): Recursively check dummy
procedures.

2012-10-12  Janus Weil  <janus@gcc.gnu.org>

PR fortran/40453
* gfortran.dg/dummy_procedure_9.f90: New.

From-SVN: r192391

gcc/fortran/ChangeLog
gcc/fortran/interface.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/dummy_procedure_9.f90 [new file with mode: 0644]

index a3d282b15a88a3c84d157206917ea6503795c2f5..ad701865927dea58f5850796844ee136a0ca091f 100644 (file)
@@ -1,3 +1,9 @@
+2012-10-12  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/40453
+       * interface.c (check_dummy_characteristics): Recursively check dummy
+       procedures.
+
 2012-10-11  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/54784
index 4822149cc0bdf06f24e21b9706fc9c4a575e0f47..2bdabfe806cde3f14a787a94620cfd9d683dba50 100644 (file)
@@ -1063,6 +1063,19 @@ check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
   /* FIXME: Do more comprehensive testing of attributes, like e.g.
            ASYNCHRONOUS, CONTIGUOUS, VALUE, VOLATILE, etc.  */
 
+  /* Check interface of dummy procedures.  */
+  if (s1->attr.flavor == FL_PROCEDURE)
+    {
+      char err[200];
+      if (!gfc_compare_interfaces (s1, s2, s2->name, 0, 1, err, sizeof(err),
+                                  NULL, NULL))
+       {
+         snprintf (errmsg, err_len, "Interface mismatch in dummy procedure "
+                   "'%s': %s", s1->name, err);
+         return FAILURE;
+       }
+    }
+
   /* Check string length.  */
   if (s1->ts.type == BT_CHARACTER
       && s1->ts.u.cl && s1->ts.u.cl->length
index 776727c88afb060c01f821447c2236550b1720bf..0612d04351fa8a42b6e5ac44b684534336963df5 100644 (file)
@@ -1,3 +1,8 @@
+2012-10-12  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/40453
+       * gfortran.dg/dummy_procedure_9.f90: New.
+
 2012-10-12  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/54894
diff --git a/gcc/testsuite/gfortran.dg/dummy_procedure_9.f90 b/gcc/testsuite/gfortran.dg/dummy_procedure_9.f90
new file mode 100644 (file)
index 0000000..16da37f
--- /dev/null
@@ -0,0 +1,37 @@
+! { dg-do compile }
+!
+! PR 40453: [F95] Enhanced (recursive) argument checking
+!
+! Contributed by Tobias Burnus <burnus@gcc.gnu.org>
+
+program RecursiveInterface
+  
+  call c(b2)  ! { dg-error "Interface mismatch in dummy procedure" }
+
+ contains
+
+    subroutine a1(x)
+      real :: x
+    end subroutine
+
+    subroutine a2(i)
+      integer :: i
+    end subroutine
+
+    !!!!!!!!!!!!!!!
+
+    subroutine b1 (f1)
+      procedure(a1) :: f1
+    end subroutine
+
+    subroutine b2 (f2)
+      procedure(a2) :: f2
+    end subroutine
+
+    !!!!!!!!!!!!!!!
+
+    subroutine c(g)
+     procedure(b1) :: g
+    end subroutine
+  
+end