Commit faa9232d by Jakub Jelinek Committed by Jakub Jelinek

re PR c++/82294 (Array of objects with constexpr constructors initialized from…

re PR c++/82294 (Array of objects with constexpr constructors initialized from space-inefficient memory image)

	PR c++/82294
	PR c++/87436
	* init.c (build_vec_init): Change num_initialized_elts type from int
	to HOST_WIDE_INT.  Build a RANGE_EXPR if e needs to be repeated more
	than once.

From-SVN: r267142
parent 8d33eae8
2018-12-14 Jakub Jelinek <jakub@redhat.com>
PR c++/82294
PR c++/87436
* init.c (build_vec_init): Change num_initialized_elts type from int
to HOST_WIDE_INT. Build a RANGE_EXPR if e needs to be repeated more
than once.
2018-12-13 Marek Polacek <polacek@redhat.com>
PR c++/88216 - ICE with class type in non-type template parameter.
......
......@@ -4104,7 +4104,7 @@ build_vec_init (tree base, tree maxindex, tree init,
tree compound_stmt;
int destroy_temps;
tree try_block = NULL_TREE;
int num_initialized_elts = 0;
HOST_WIDE_INT num_initialized_elts = 0;
bool is_global;
tree obase = base;
bool xvalue = false;
......@@ -4539,10 +4539,13 @@ build_vec_init (tree base, tree maxindex, tree init,
if (e)
{
int max = tree_to_shwi (maxindex)+1;
for (; num_initialized_elts < max; ++num_initialized_elts)
HOST_WIDE_INT last = tree_to_shwi (maxindex);
if (num_initialized_elts <= last)
{
tree field = size_int (num_initialized_elts);
if (num_initialized_elts != last)
field = build2 (RANGE_EXPR, sizetype, field,
size_int (last));
CONSTRUCTOR_APPEND_ELT (const_vec, field, e);
}
}
......
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