From: Jason Merrill Date: Sat, 23 Nov 2013 16:28:57 +0000 (-0500) Subject: re PR c++/58868 (ICE: in count_type_elements, at expr.c:5495 with -std=gnu++0x) X-Git-Tag: releases/gcc-4.9.0~2496 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a47c2f6211a0e06551b48d3d9583dc974cba15c6;p=thirdparty%2Fgcc.git re PR c++/58868 (ICE: in count_type_elements, at expr.c:5495 with -std=gnu++0x) PR c++/58868 * init.c (build_aggr_init): Don't clobber the type of init if we got an INIT_EXPR back from build_vec_init. (build_vec_init): Do digest_init on trivial initialization. From-SVN: r205311 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 05aa444d4391..91e4132907b9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2013-11-23 Jason Merrill + + PR c++/58868 + * init.c (build_aggr_init): Don't clobber the type of init + if we got an INIT_EXPR back from build_vec_init. + (build_vec_init): Do digest_init on trivial initialization. + 2013-11-23 Alexander Ivchenko PR c++/58525 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index dc40989cc107..1e6e6915bdcb 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1507,7 +1507,8 @@ build_aggr_init (tree exp, tree init, int flags, tsubst_flags_t complain) TREE_READONLY (exp) = was_const; TREE_THIS_VOLATILE (exp) = was_volatile; TREE_TYPE (exp) = type; - if (init) + /* Restore the type of init unless it was used directly. */ + if (init && TREE_CODE (stmt_expr) != INIT_EXPR) TREE_TYPE (init) = itype; return stmt_expr; } @@ -3421,6 +3422,8 @@ build_vec_init (tree base, tree maxindex, tree init, brace-enclosed initializers. In this case, digest_init and store_constructor will handle the semantics for us. */ + if (BRACE_ENCLOSED_INITIALIZER_P (init)) + init = digest_init (atype, init, complain); stmt_expr = build2 (INIT_EXPR, atype, base, init); if (length_check) stmt_expr = build3 (COND_EXPR, atype, length_check,