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



--- Comment #5 from janus at gcc dot gnu.org 2012-12-28 21:53:38 UTC ---

There are problems with handling CLASS components in

gfc_trans_subcomponent_assign:





Index: gcc/fortran/trans-expr.c

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

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

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

@@ -5934,11 +5934,14 @@ gfc_trans_subcomponent_assign (tree dest, gfc_comp



   gfc_start_block (&block);



-  if (cm->attr.pointer || cm->attr.proc_pointer)

+  if (cm->attr.pointer || cm->attr.proc_pointer

+      || (cm->ts.type == BT_CLASS && CLASS_DATA (cm)->attr.pointer))

     {

       gfc_init_se (&se, NULL);

       /* Pointer component.  */

-      if (cm->attr.dimension && !cm->attr.proc_pointer)

+      if ((cm->attr.dimension

+       || (cm->ts.type == BT_CLASS && CLASS_DATA (cm)->attr.dimension))

+      && !cm->attr.proc_pointer)

     {

       /* Array pointer.  */

       if (expr->expr_type == EXPR_NULL)







However, this is not enough. The test case still gives an ICE.

Reply via email to