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



--- Comment #10 from janus at gcc dot gnu.org 2013-01-10 20:39:58 UTC ---

The following patch makes comment 8 and 9 compile, but I'm not sure if the

generated code is correct:



Index: gcc/fortran/trans-expr.c

===================================================================

--- gcc/fortran/trans-expr.c    (revision 194927)

+++ gcc/fortran/trans-expr.c    (working copy)

@@ -5990,23 +5990,11 @@ gfc_trans_subcomponent_assign (tree dest, gfc_comp

       gfc_add_expr_to_block (&block, tmp);

     }

     }

-  else if (expr->ts.type == BT_DERIVED)

+  else if (expr->ts.type == BT_DERIVED && expr->expr_type == EXPR_STRUCTURE)

     {

-      if (expr->expr_type != EXPR_STRUCTURE)

-    {

-      gfc_init_se (&se, NULL);

-      gfc_conv_expr (&se, expr);

-      gfc_add_block_to_block (&block, &se.pre);

-      gfc_add_modify (&block, dest,

-                   fold_convert (TREE_TYPE (dest), se.expr));

-      gfc_add_block_to_block (&block, &se.post);

-    }

-      else

-    {

-      /* Nested constructors.  */

-      tmp = gfc_trans_structure_assign (dest, expr);

-      gfc_add_expr_to_block (&block, tmp);

-    }

+      /* Nested constructors.  */

+      tmp = gfc_trans_structure_assign (dest, expr);

+      gfc_add_expr_to_block (&block, tmp);

     }

   else

     {

Reply via email to