re PR fortran/44696 ([OOP] ASSOCIATED fails on polymorphic variables)
authorJanus Weil <janus@gcc.gnu.org>
Tue, 29 Jun 2010 19:06:07 +0000 (21:06 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Tue, 29 Jun 2010 19:06:07 +0000 (21:06 +0200)
2010-06-29  Janus Weil  <janus@gcc.gnu.org>

PR fortran/44696
* trans-intrinsic.c (gfc_conv_associated): Handle polymorphic variables
passed as second argument of ASSOCIATED.

2010-06-29  Janus Weil  <janus@gcc.gnu.org>

PR fortran/44696
* gfortran.dg/associated_target_4.f90: New.

From-SVN: r161554

gcc/fortran/ChangeLog
gcc/fortran/trans-intrinsic.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/associated_target_4.f90 [new file with mode: 0644]

index 34c8f6407b53aa44af1b6147469d3162744383e6..a838747821b0d98fa5d0300345035ae39ad9228e 100644 (file)
@@ -1,3 +1,9 @@
+2010-06-29  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/44696
+       * trans-intrinsic.c (gfc_conv_associated): Handle polymorphic variables
+       passed as second argument of ASSOCIATED.
+
 2010-06-29  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/44582
index 9f63ebfb3db11dbfa5b214b2560739d63eaa6850..06fd538d7752ba62921ab175e53cc27aa554d81e 100644 (file)
@@ -4416,6 +4416,8 @@ gfc_conv_associated (gfc_se *se, gfc_expr *expr)
   else
     {
       /* An optional target.  */
+      if (arg2->expr->ts.type == BT_CLASS)
+       gfc_add_component_ref (arg2->expr, "$data");
       ss2 = gfc_walk_expr (arg2->expr);
 
       nonzero_charlen = NULL_TREE;
index 6bdd576ca7a6ba4cda147136f1d8c44b8a034e25..5a23fe001d900ddc3403bba9e3faad8f0593987d 100644 (file)
@@ -1,3 +1,8 @@
+2010-06-29  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/44696
+       * gfortran.dg/associated_target_4.f90: New.
+
 2010-06-29  Paul Thomas  <pault@gcc.gnu.org>
 
        PR fortran/44582
diff --git a/gcc/testsuite/gfortran.dg/associated_target_4.f90 b/gcc/testsuite/gfortran.dg/associated_target_4.f90
new file mode 100644 (file)
index 0000000..24f3317
--- /dev/null
@@ -0,0 +1,23 @@
+! { dg-do run }
+!
+! PR 44696: [OOP] ASSOCIATED fails on polymorphic variables
+!
+! Original test case by Hans-Werner Boschmann <boschmann@tp1.physik.uni-siegen.de>
+! Modified by Janus Weil <janus@gcc.gnu.org>
+
+program rte1
+  implicit none
+  type::node_type
+     class(node_type),pointer::parent,child
+     integer::id
+  end type node_type
+  class(node_type),pointer::root
+  allocate(root)
+  allocate(root%child)
+  root%child%parent=>root
+  root%id=1
+  root%child%id=2
+  print *,root%child%id," is child of ",root%id,":"
+  print *,root%child%parent%id,root%id
+  if (.not. associated(root%child%parent,root)) call abort()
+end program rte1