Commit 4784470a by Kai Tietz Committed by Kai Tietz

re PR c++/63904 (ICE when accessing array member of constexpr struct)

2014-11-27  Kai Tietz  <ktietz@redhat.com>

	PR c++/63904
	* constexpr.c (cxx_eval_vec_init_1): Avoid
	type-overflow issue.

From-SVN: r218123
parent 4c1bfef7
2014-11-27 Kai Tietz <ktietz@redhat.com>
PR c++/63904
* constexpr.c (cxx_eval_vec_init_1): Avoid
type-overflow issue.
2014-11-26 Jason Merrill <jason@redhat.com> 2014-11-26 Jason Merrill <jason@redhat.com>
Allow partial specialization of variable templates. Allow partial specialization of variable templates.
......
...@@ -2013,12 +2013,12 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init, ...@@ -2013,12 +2013,12 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
bool *non_constant_p, bool *overflow_p) bool *non_constant_p, bool *overflow_p)
{ {
tree elttype = TREE_TYPE (atype); tree elttype = TREE_TYPE (atype);
int max = tree_to_shwi (array_type_nelts (atype)); unsigned HOST_WIDE_INT max = tree_to_uhwi (array_type_nelts_top (atype));
verify_ctor_sanity (ctx, atype); verify_ctor_sanity (ctx, atype);
vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor); vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
vec_alloc (*p, max + 1); vec_alloc (*p, max + 1);
bool pre_init = false; bool pre_init = false;
int i; unsigned HOST_WIDE_INT i;
/* For the default constructor, build up a call to the default /* For the default constructor, build up a call to the default
constructor of the element type. We only need to handle class types constructor of the element type. We only need to handle class types
...@@ -2043,7 +2043,7 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init, ...@@ -2043,7 +2043,7 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
pre_init = true; pre_init = true;
} }
for (i = 0; i <= max; ++i) for (i = 0; i < max; ++i)
{ {
tree idx = build_int_cst (size_type_node, i); tree idx = build_int_cst (size_type_node, i);
tree eltinit; tree eltinit;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment