https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64209

--- Comment #5 from janus at gcc dot gnu.org ---
(In reply to janus from comment #4)
> The following patch is sufficient to make the reduced test case in comment 2
> work:

... but unfortunately it caused a number of testsuite regressions. The
following variant is clean:


Index: gcc/fortran/trans-expr.c
===================================================================
--- gcc/fortran/trans-expr.c    (Revision 218874)
+++ gcc/fortran/trans-expr.c    (Arbeitskopie)
@@ -943,7 +943,7 @@ tree
 gfc_trans_class_init_assign (gfc_code *code)
 {
   stmtblock_t block;
-  tree tmp;
+  tree tmp, cond;
   gfc_se dst,src,memsz;
   gfc_expr *lhs, *rhs, *sz;

@@ -980,6 +980,12 @@ gfc_trans_class_init_assign (gfc_code *code)
       src.expr = gfc_build_addr_expr (NULL_TREE, src.expr);

       tmp = gfc_build_memcpy_call (dst.expr, src.expr, memsz.expr);
+
+      cond = fold_build2_loc (input_location, NE_EXPR, boolean_type_node,
+                  src.expr, fold_convert (TREE_TYPE (src.expr),
+                              null_pointer_node));
+      tmp = build3_loc (input_location, COND_EXPR, TREE_TYPE (tmp), cond, tmp,
+            build_empty_stmt (input_location));
     }

   if (code->expr1->symtree->n.sym->attr.optional


Still, it does not cure the segfault in comment 0.

Reply via email to