re PR c++/84558 (ICE with invalid constexpr constructor)
PR c++/84558 * constexpr.c (cxx_eval_vec_init_1): For reuse, treat NULL eltinit like a valid constant initializer. Formatting fixes. * g++.dg/cpp1y/pr84558.C: New test. From-SVN: r258014
This commit is contained in:
parent
08735f538c
commit
c2236b9b79
@ -1,3 +1,9 @@
|
||||
2018-02-26 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/84558
|
||||
* constexpr.c (cxx_eval_vec_init_1): For reuse, treat NULL eltinit like
|
||||
a valid constant initializer. Formatting fixes.
|
||||
|
||||
2018-02-26 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/84540
|
||||
|
@ -2959,9 +2959,8 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
|
||||
if (!lvalue_p (init))
|
||||
eltinit = move (eltinit);
|
||||
eltinit = force_rvalue (eltinit, tf_warning_or_error);
|
||||
eltinit = (cxx_eval_constant_expression
|
||||
(&new_ctx, eltinit, lval,
|
||||
non_constant_p, overflow_p));
|
||||
eltinit = cxx_eval_constant_expression (&new_ctx, eltinit, lval,
|
||||
non_constant_p, overflow_p);
|
||||
}
|
||||
if (*non_constant_p && !ctx->quiet)
|
||||
break;
|
||||
@ -2974,12 +2973,13 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
|
||||
else
|
||||
CONSTRUCTOR_APPEND_ELT (*p, idx, eltinit);
|
||||
/* Reuse the result of cxx_eval_constant_expression call
|
||||
from the first iteration to all others if it is a constant
|
||||
initializer that doesn't require relocations. */
|
||||
from the first iteration to all others if it is a constant
|
||||
initializer that doesn't require relocations. */
|
||||
if (reuse
|
||||
&& max > 1
|
||||
&& (initializer_constant_valid_p (eltinit, TREE_TYPE (eltinit))
|
||||
== null_pointer_node))
|
||||
&& (eltinit == NULL_TREE
|
||||
|| (initializer_constant_valid_p (eltinit, TREE_TYPE (eltinit))
|
||||
== null_pointer_node)))
|
||||
{
|
||||
if (new_ctx.ctor != ctx->ctor)
|
||||
eltinit = new_ctx.ctor;
|
||||
|
@ -1,3 +1,8 @@
|
||||
2018-02-26 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR c++/84558
|
||||
* g++.dg/cpp1y/pr84558.C: New test.
|
||||
|
||||
2018-02-26 Paolo Carlini <paolo.carlini@oracle.com>
|
||||
|
||||
PR c++/84540
|
||||
|
6
gcc/testsuite/g++.dg/cpp1y/pr84558.C
Normal file
6
gcc/testsuite/g++.dg/cpp1y/pr84558.C
Normal file
@ -0,0 +1,6 @@
|
||||
// PR c++/84558
|
||||
// { dg-do compile { target c++14 } }
|
||||
|
||||
struct A { static int i; constexpr A () { i = 0; } };
|
||||
struct B { A a[2][3][4]; };
|
||||
B b;
|
Loading…
Reference in New Issue
Block a user