Index: testsuite/gfortran.dg/forall_3.f90 =================================================================== --- testsuite/gfortran.dg/forall_3.f90 (revision 0) +++ testsuite/gfortran.dg/forall_3.f90 (revision 0) @@ -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 + Index: fortran/trans-stmt.c =================================================================== --- fortran/trans-stmt.c (revision 109502) +++ fortran/trans-stmt.c (working copy) @@ -2122,7 +2122,8 @@ gfc_trans_pointer_assign_need_temp (gfc_ 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. */