PR fortran/26801
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 18 Jun 2006 17:36:47 +0000 (17:36 +0000)
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 18 Jun 2006 17:36:47 +0000 (17:36 +0000)
* trans-intrinsic.c (gfc_conv_associated): Use pre and post blocks
of the scalarization expression.

* gfortran.dg/associated_4.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@114757 138bc75d-0d04-0410-961f-82ee72b054a4

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

index b2b9354..935adf5 100644 (file)
@@ -1,3 +1,9 @@
+2006-06-18  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+       PR fortran/26801
+       * trans-intrinsic.c (gfc_conv_associated): Use pre and post blocks
+       of the scalarization expression.
+
 2006-06-18  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/19310
index 9d6a0b7..b4863a0 100644 (file)
@@ -2840,6 +2840,8 @@ gfc_conv_associated (gfc_se *se, gfc_expr *expr)
           gfc_conv_expr_lhs (&arg1se, arg1->expr);
           tmp2 = gfc_conv_descriptor_data_get (arg1se.expr);
         }
+      gfc_add_block_to_block (&se->pre, &arg1se.pre);
+      gfc_add_block_to_block (&se->post, &arg1se.post);
       tmp = build2 (NE_EXPR, boolean_type_node, tmp2,
                    fold_convert (TREE_TYPE (tmp2), null_pointer_node));
       se->expr = tmp;
@@ -2863,6 +2865,8 @@ gfc_conv_associated (gfc_se *se, gfc_expr *expr)
           gfc_conv_expr (&arg1se, arg1->expr);
           arg2se.want_pointer = 1;
           gfc_conv_expr (&arg2se, arg2->expr);
+         gfc_add_block_to_block (&se->pre, &arg1se.pre);
+         gfc_add_block_to_block (&se->post, &arg1se.post);
           tmp = build2 (EQ_EXPR, boolean_type_node, arg1se.expr, arg2se.expr);
           se->expr = tmp;
         }
index c0e3fa2..985d645 100644 (file)
@@ -1,3 +1,8 @@
+2006-06-18  Francois-Xavier Coudert  <coudert@clipper.ens.fr>
+
+       PR fortran/26801
+       * gfortran.dg/associated_4.f90: New test.
+
 2006-06-18  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR fortran/19310
diff --git a/gcc/testsuite/gfortran.dg/associated_4.f90 b/gcc/testsuite/gfortran.dg/associated_4.f90
new file mode 100644 (file)
index 0000000..dd4490b
--- /dev/null
@@ -0,0 +1,20 @@
+! { dg-do run }
+! PR fortran/26801
+  implicit none
+
+  integer :: i
+  integer,target :: u
+  logical :: l
+  character(len=8) :: A
+  type dt
+    integer, pointer :: a => NULL()
+  end type dt
+  type(dt) :: obj(2)
+
+  i = 2
+  l = associated(obj(i)%a)
+  write(A,*) l
+  l = associated(obj(i)%a,u)
+  print *, l
+  write(A,*) l
+end