re PR fortran/49562 ([OOP] assigning value to type-bound function)
authorJanus Weil <janus@gcc.gnu.org>
Sat, 2 Jul 2011 11:08:41 +0000 (13:08 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Sat, 2 Jul 2011 11:08:41 +0000 (13:08 +0200)
2011-07-02  Janus Weil  <janus@gcc.gnu.org>

PR fortran/49562
* expr.c (gfc_check_vardef_context): Handle type-bound procedures.

2011-07-02  Janus Weil  <janus@gcc.gnu.org>

PR fortran/49562
* gfortran.dg/typebound_proc_23.f90: New.

From-SVN: r175779

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

index 055c15d29e1e2d985bcf013c21004a071a833d14..e2d5d124dac0024a4e9845daa48968074a9e1d13 100644 (file)
@@ -1,3 +1,8 @@
+2011-07-02  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/49562
+       * expr.c (gfc_check_vardef_context): Handle type-bound procedures.
+
 2011-06-30  Jakub Jelinek  <jakub@redhat.com>
 
        PR fortran/49540
index 4a7a951b6d6f1bb3eecb0cdb01d064c71975c97c..6dcfda1e53abee8a1b42dad043b5ec42f13e621d 100644 (file)
@@ -4394,8 +4394,8 @@ gfc_check_vardef_context (gfc_expr* e, bool pointer, bool alloc_obj,
       sym = e->value.function.esym ? e->value.function.esym : e->symtree->n.sym;
     }
 
-  if (!pointer && e->expr_type == EXPR_FUNCTION
-      && sym->result->attr.pointer)
+  attr = gfc_expr_attr (e);
+  if (!pointer && e->expr_type == EXPR_FUNCTION && attr.pointer)
     {
       if (!(gfc_option.allow_std & GFC_STD_F2008))
        {
@@ -4432,7 +4432,6 @@ gfc_check_vardef_context (gfc_expr* e, bool pointer, bool alloc_obj,
 
   /* Find out whether the expr is a pointer; this also means following
      component references to the last one.  */
-  attr = gfc_expr_attr (e);
   is_pointer = (attr.pointer || attr.proc_pointer);
   if (pointer && !is_pointer)
     {
index 5d44545dd845b3e9b01924ec5715bcc0b07bd9e7..925423540c80cec3c5ffd45c9663282f5a2215f9 100644 (file)
@@ -1,3 +1,8 @@
+2011-07-02  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/49562
+       * gfortran.dg/typebound_proc_23.f90: New.
+
 2011-07-01  Jonathan Wakely  <jwakely.gcc@gmail.com>
 
        PR c++/49605
diff --git a/gcc/testsuite/gfortran.dg/typebound_proc_23.f90 b/gcc/testsuite/gfortran.dg/typebound_proc_23.f90
new file mode 100644 (file)
index 0000000..ff682a4
--- /dev/null
@@ -0,0 +1,32 @@
+! { dg-do run }
+!
+! PR 49562: [4.6/4.7 Regression] [OOP] assigning value to type-bound function
+!
+! Contributed by Hans-Werner Boschmann <boschmann@tp1.physik.uni-siegen.de>
+
+module ice
+  type::ice_type
+   contains
+     procedure::ice_func
+  end type
+  integer, target :: it = 0
+contains
+  function ice_func(this)
+    integer, pointer :: ice_func
+    class(ice_type)::this
+    ice_func => it
+  end function ice_func
+  subroutine ice_sub(a)
+    class(ice_type)::a
+    a%ice_func() = 1
+  end subroutine ice_sub
+end module
+
+use ice
+type(ice_type) :: t
+if (it/=0) call abort()
+call ice_sub(t)
+if (it/=1) call abort()
+end
+
+! { dg-final { cleanup-modules "ice" } }