trans-stmt.c (gfc_trans_pointer_assign_need_temp): Use fold_convert to avoid type...
authorAndrew Pinski <pinskia@physics.uc.edu>
Mon, 9 Jan 2006 20:42:26 +0000 (20:42 +0000)
committerAndrew Pinski <pinskia@gcc.gnu.org>
Mon, 9 Jan 2006 20:42:26 +0000 (12:42 -0800)
2006-01-09  Andrew Pinski  <pinskia@physics.uc.edu>

        fortran/24936
        * trans-stmt.c (gfc_trans_pointer_assign_need_temp): Use fold_convert
        to avoid type mismatch.

2006-01-09  Andrew Pinski  <pinskia@physics.uc.edu>

        fortran/24936
        * gfortran.dg/forall_3.f90: New test.

From-SVN: r109508

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

index 9c92709abcb73469ff43ce867da8611f2c340d87..44f6a481aeb54d051622c9733e8c18960d0293e2 100644 (file)
@@ -1,3 +1,9 @@
+2006-01-09  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       fortran/24936
+       * trans-stmt.c (gfc_trans_pointer_assign_need_temp): Use fold_convert
+       to avoid type mismatch.
+
 2006-01-09  Andrew Pinski  <pinskia@physics.uc.edu>
 
        PR fortran/21977
index cf88918b58650e61ebd5d5cf5295942058a99272..df93db618b283ecb835dca72b50660e296179eb3 100644 (file)
@@ -2122,7 +2122,8 @@ gfc_trans_pointer_assign_need_temp (gfc_expr * expr1, gfc_expr * expr2,
       rse.want_pointer = 1;
       gfc_conv_expr (&rse, expr2);
       gfc_add_block_to_block (&body, &rse.pre);
-      gfc_add_modify_expr (&body, lse.expr, rse.expr);
+      gfc_add_modify_expr (&body, lse.expr,
+                          fold_convert (TREE_TYPE (lse.expr), rse.expr));
       gfc_add_block_to_block (&body, &rse.post);
 
       /* Increment count.  */
index 92f7e0205e5de0519232f9f11b7a86e68fb64033..d2a59cbc9f86b0913021977455f8958daf4c6362 100644 (file)
@@ -1,3 +1,8 @@
+2006-01-09  Andrew Pinski  <pinskia@physics.uc.edu>
+
+       fortran/24936
+       * gfortran.dg/forall_3.f90: New test.
+
 2006-01-09  Andrew Pinski  <pinskia@physics.uc.edu>
 
        PR fortran/21977
diff --git a/gcc/testsuite/gfortran.dg/forall_3.f90 b/gcc/testsuite/gfortran.dg/forall_3.f90
new file mode 100644 (file)
index 0000000..bc5e58c
--- /dev/null
@@ -0,0 +1,18 @@
+! the problem here was that we had forgot to call
+! fold_convert in gfc_trans_pointer_assign_need_temp
+! so that we got a pointer to char instead of a 
+! pointer to an array
+! we really don't need a temp here.
+! { dg-do compile }
+
+      program test_forall
+         type element
+            character(32), pointer :: name
+         end type element
+         type(element)     :: charts(50)
+         character(32), target :: names(50)
+         forall(i=1:50)
+            charts(i)%name => names(i)
+         end forall
+      end
+