re PR fortran/57217 ([OOP] Accepts invalid TBP overriding - lacking arguments check)
authorJanus Weil <janus@gcc.gnu.org>
Tue, 28 May 2013 11:21:44 +0000 (13:21 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Tue, 28 May 2013 11:21:44 +0000 (13:21 +0200)
2013-05-28  Janus Weil  <janus@gcc.gnu.org>
    Tobias Burnus  <burnus@net-b.de>

PR fortran/57217
* interface.c (check_dummy_characteristics): Symmetrize type check.

2013-05-28  Janus Weil  <janus@gcc.gnu.org>
    Tobias Burnus  <burnus@net-b.de>

PR fortran/57217
* gfortran.dg/typebound_override_4.f90: New.

Co-Authored-By: Tobias Burnus <burnus@net-b.de>
From-SVN: r199375

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

index e13a46b5f5dac0586ff678abcff5dfe127d4c516..4ebdf3c2aa5d07cdc9f6d4491f6ac1c40c2790f2 100644 (file)
@@ -1,3 +1,9 @@
+2013-05-28  Janus Weil  <janus@gcc.gnu.org>
+           Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/57217
+       * interface.c (check_dummy_characteristics): Symmetrize type check.
+
 2013-05-27  Bud Davis  <jmdavis@link.com>
 
        PR fortran/50405
index 1b967fac275fdf84b9564df104ce15bd95cbad8a..2f8c6a5e54f5a992bfabc5110a78db164918c3d2 100644 (file)
@@ -1030,7 +1030,8 @@ check_dummy_characteristics (gfc_symbol *s1, gfc_symbol *s2,
     return s1 == s2 ? true : false;
 
   /* Check type and rank.  */
-  if (type_must_agree && !compare_type_rank (s2, s1))
+  if (type_must_agree &&
+      (!compare_type_rank (s1, s2) || !compare_type_rank (s2, s1)))
     {
       snprintf (errmsg, err_len, "Type/rank mismatch in argument '%s'",
                s1->name);
index c62514c99821fa544c4fab6fc217757354d6ef5f..7e70dce0cdd48ea456292e0c6547825b88ffb687 100644 (file)
@@ -1,3 +1,9 @@
+2013-05-28  Janus Weil  <janus@gcc.gnu.org>
+           Tobias Burnus  <burnus@net-b.de>
+
+       PR fortran/57217
+       * gfortran.dg/typebound_override_4.f90: New.
+
 2013-05-28  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/57411
diff --git a/gcc/testsuite/gfortran.dg/typebound_override_4.f90 b/gcc/testsuite/gfortran.dg/typebound_override_4.f90
new file mode 100644 (file)
index 0000000..2b747a8
--- /dev/null
@@ -0,0 +1,34 @@
+! { dg-do compile }
+!
+! PR 57217: [4.7/4.8/4.9 Regression][OOP] Accepts invalid TBP overriding - lacking arguments check
+!
+! Contributed by Salvatore Filippone <filippone.salvatore@gmail.com>
+
+module base_mod
+  implicit none
+  type base_type
+  contains
+    procedure, pass(map)  :: clone    => base_clone
+  end type
+contains
+  subroutine  base_clone(map,mapout)
+    class(base_type) :: map
+    class(base_type) :: mapout
+  end subroutine
+end module
+
+module r_mod
+  use base_mod
+  implicit none
+  type, extends(base_type) :: r_type
+  contains
+    procedure, pass(map)  :: clone    => r_clone   ! { dg-error "Type/rank mismatch in argument" }
+  end type
+contains
+  subroutine  r_clone(map,mapout)
+    class(r_type) :: map
+    class(r_type) :: mapout
+  end subroutine
+end module
+
+! { dg-final { cleanup-modules "base_mod r_mod" } }