aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2013-11-23 11:28:57 -0500
committerJason Merrill <jason@gcc.gnu.org>2013-11-23 11:28:57 -0500
commita47c2f6211a0e06551b48d3d9583dc974cba15c6 (patch)
treefe88b77103125e1a1abe4ee28288cae23bdef9be /gcc
parentf391b44b199e27712c15ea880f54f41cd11f34e3 (diff)
downloadgcc-a47c2f6211a0e06551b48d3d9583dc974cba15c6.zip
gcc-a47c2f6211a0e06551b48d3d9583dc974cba15c6.tar.gz
gcc-a47c2f6211a0e06551b48d3d9583dc974cba15c6.tar.bz2
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog7
-rw-r--r--gcc/cp/init.c5
2 files changed, 11 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 05aa444..91e4132 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,10 @@
+2013-11-23 Jason Merrill <jason@redhat.com>
+
+ 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 <alexander.ivchenko@intel.com>
PR c++/58525
diff --git a/gcc/cp/init.c b/gcc/cp/init.c
index dc40989..1e6e691 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,