https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80171
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org --- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> --- On trunk: #1 0x000000000173ef58 in generic_simplify_VIEW_CONVERT_EXPR (loc=0, code=VIEW_CONVERT_EXPR, type=<integer_type 0x7ffff6a00f18 size_t>, op0=<tree 0x0>) at generic-match.c:9836 9836 if ((0 && useless_type_conversion_p (type, TREE_TYPE (captures[0]))) || (1 && type == TREE_TYPE (captures[0]))) (gdb) p captures[0] $1 = (tree_node *) 0x0 #4 0x0000000000e05840 in fold_ctor_reference ( type=<integer_type 0x7ffff6a00f18 size_t>, ctor=<addr_expr 0x7ffff677ac20>, offset=0, size=64, from_decl=<var_decl 0x7ffff678a000 _ZTVN5padis12isislistener3tlv2te25IPv4NeighborAddressSubTlvE>) at /space/rguenther/src/svn/gcc-7-branch/gcc/gimple-fold.c:6242 6242 ret = fold_unary (VIEW_CONVERT_EXPR, type, ret); (gdb) p ret $2 = <tree 0x0> Simple fix (further reduced testcase appreciated) Index: gcc/gimple-fold.c =================================================================== --- gcc/gimple-fold.c (revision 246437) +++ gcc/gimple-fold.c (working copy) @@ -6239,9 +6239,12 @@ fold_ctor_reference (tree type, tree cto && !compare_tree_int (TYPE_SIZE (TREE_TYPE (ctor)), size)) { ret = canonicalize_constructor_val (unshare_expr (ctor), from_decl); - ret = fold_unary (VIEW_CONVERT_EXPR, type, ret); if (ret) - STRIP_USELESS_TYPE_CONVERSION (ret); + { + ret = fold_unary (VIEW_CONVERT_EXPR, type, ret); + if (ret) + STRIP_USELESS_TYPE_CONVERSION (ret); + } return ret; } /* For constants and byte-aligned/sized reads try to go through