]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/59547 ([OOP] Problem with using tbp specification function in multiple...
authorJanus Weil <janus@gcc.gnu.org>
Sat, 4 Jan 2014 09:25:04 +0000 (10:25 +0100)
committerJanus Weil <janus@gcc.gnu.org>
Sat, 4 Jan 2014 09:25:04 +0000 (10:25 +0100)
2014-01-04  Janus Weil  <janus@gcc.gnu.org>

PR fortran/59547
* class.c (add_proc_comp): Copy pure attribute.

2014-01-04  Janus Weil  <janus@gcc.gnu.org>

PR fortran/59547
* gfortran.dg/typebound_proc_32.f90: New.

From-SVN: r206331

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

index 202c0479e426f09982da0b526f4f29961e7692f0..40a26dba6326cd15e4df5e15558d7c715b711d04 100644 (file)
@@ -1,3 +1,8 @@
+2014-01-04  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/59547
+       * class.c (add_proc_comp): Copy pure attribute.
+
 2014-01-02  Richard Sandiford  <rdsandiford@googlemail.com>
 
        Update copyright years
index 47a308257eba32f708f613ad5fb3c6447b7e4291..1b243f686b90d157ab46f3d28e1a01133afe4c28 100644 (file)
@@ -714,9 +714,11 @@ add_proc_comp (gfc_symbol *vtype, const char *name, gfc_typebound_proc *tb)
 
   if (tb->u.specific)
     {
-      c->ts.interface = tb->u.specific->n.sym;
+      gfc_symbol *ifc = tb->u.specific->n.sym;
+      c->ts.interface = ifc;
       if (!tb->deferred)
        c->initializer = gfc_get_variable_expr (tb->u.specific);
+      c->attr.pure = ifc->attr.pure;
     }
 }
 
index 517c7240d14d3a0ac4e1b387b7e98b16406640df..8a9c0cbaf0e5597b6680e3e5822de113021de8b8 100644 (file)
@@ -1,3 +1,8 @@
+2014-01-04  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/59547
+       * gfortran.dg/typebound_proc_32.f90: New.
+
 2014-01-03  Marc Glisse  <marc.glisse@inria.fr>
 
        PR c++/58950
diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_32.f90 b/gcc/testsuite/gfortran.dg/typebound_proc_32.f90
new file mode 100644 (file)
index 0000000..00ae9c7
--- /dev/null
@@ -0,0 +1,35 @@
+! { dg-do compile }
+!
+! PR 59547: [OOP] Problem with using tbp specification function in multiple class procedures
+!
+! Contributed by <bugs@miller-mohr.de>
+
+module classes
+
+  implicit none
+
+  type :: base_class
+   contains
+     procedure, nopass :: get_num
+     procedure :: get_array, get_array2
+  end type
+
+contains
+
+  pure integer function get_num()
+    get_num = 2
+  end function
+
+  function get_array( this ) result(array)
+    class(base_class), intent(in) :: this
+    integer, dimension( this%get_num() ) :: array
+  end function
+
+  function get_array2( this ) result(array)
+    class(base_class), intent(in) :: this
+    integer, dimension( this%get_num(), this%get_num() ) :: array
+  end function
+
+end module
+
+! { dg-final { cleanup-modules "classes" } }