http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56615



--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> 2013-03-14 
21:04:44 UTC ---

trans-intrinsic.c gfc_conv_intrinsic_transfer's has:



      /* Repack the source if not a full variable array.  */

      if (arg->expr->expr_type == EXPR_VARIABLE

              && arg->expr->ref->u.ar.type != AR_FULL)

        {



However, I do not see any relation between being a full array and the need to

repack. A more useful check would be whether the expression is simply

contiguous or not.





--- a/gcc/fortran/trans-intrinsic.c

+++ b/gcc/fortran/trans-intrinsic.c

@@ -5436,7 +5436,6 @@ gfc_conv_intrinsic_transfer (gfc_se * se, gfc_expr *

expr)

       source_type = gfc_get_element_type (TREE_TYPE (argse.expr));



-      /* Repack the source if not a full variable array.  */

-      if (arg->expr->expr_type == EXPR_VARIABLE

-             && arg->expr->ref->u.ar.type != AR_FULL)

+      /* Repack the source if not simply contiguous.  */

+      if (!gfc_is_simply_contiguous (arg->expr, false))

        {

          tmp = gfc_build_addr_expr (NULL_TREE, argse.expr);

Reply via email to