* constexpr.c (cxx_eval_vec_init_1): Pass tf_none if ctx->quiet.
From-SVN: r260273
This commit is contained in:
parent
30a52a6d62
commit
dc5ca6c86f
@ -1,5 +1,7 @@
|
|||||||
2018-05-15 Jason Merrill <jason@redhat.com>
|
2018-05-15 Jason Merrill <jason@redhat.com>
|
||||||
|
|
||||||
|
* constexpr.c (cxx_eval_vec_init_1): Pass tf_none if ctx->quiet.
|
||||||
|
|
||||||
PR c++/64372 - CWG 1560, gratuitous lvalue-rvalue conversion in ?:
|
PR c++/64372 - CWG 1560, gratuitous lvalue-rvalue conversion in ?:
|
||||||
* call.c (build_conditional_expr_1): Don't force_rvalue when one arm
|
* call.c (build_conditional_expr_1): Don't force_rvalue when one arm
|
||||||
is a throw-expression.
|
is a throw-expression.
|
||||||
|
@ -2936,6 +2936,7 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
|
|||||||
vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
|
vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
|
||||||
bool pre_init = false;
|
bool pre_init = false;
|
||||||
unsigned HOST_WIDE_INT i;
|
unsigned HOST_WIDE_INT i;
|
||||||
|
tsubst_flags_t complain = ctx->quiet ? tf_none : tf_warning_or_error;
|
||||||
|
|
||||||
/* 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
|
||||||
@ -2946,7 +2947,7 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
|
|||||||
/* We only do this at the lowest level. */;
|
/* We only do this at the lowest level. */;
|
||||||
else if (value_init)
|
else if (value_init)
|
||||||
{
|
{
|
||||||
init = build_value_init (elttype, tf_warning_or_error);
|
init = build_value_init (elttype, complain);
|
||||||
pre_init = true;
|
pre_init = true;
|
||||||
}
|
}
|
||||||
else if (!init)
|
else if (!init)
|
||||||
@ -2954,7 +2955,7 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
|
|||||||
vec<tree, va_gc> *argvec = make_tree_vector ();
|
vec<tree, va_gc> *argvec = make_tree_vector ();
|
||||||
init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
|
init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
|
||||||
&argvec, elttype, LOOKUP_NORMAL,
|
&argvec, elttype, LOOKUP_NORMAL,
|
||||||
tf_warning_or_error);
|
complain);
|
||||||
release_tree_vector (argvec);
|
release_tree_vector (argvec);
|
||||||
init = build_aggr_init_expr (TREE_TYPE (init), init);
|
init = build_aggr_init_expr (TREE_TYPE (init), init);
|
||||||
pre_init = true;
|
pre_init = true;
|
||||||
@ -2981,8 +2982,7 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
|
|||||||
reuse = i == 0;
|
reuse = i == 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
eltinit = cp_build_array_ref (input_location, init, idx,
|
eltinit = cp_build_array_ref (input_location, init, idx, complain);
|
||||||
tf_warning_or_error);
|
|
||||||
eltinit = cxx_eval_vec_init_1 (&new_ctx, elttype, eltinit, value_init,
|
eltinit = cxx_eval_vec_init_1 (&new_ctx, elttype, eltinit, value_init,
|
||||||
lval,
|
lval,
|
||||||
non_constant_p, overflow_p);
|
non_constant_p, overflow_p);
|
||||||
@ -3000,11 +3000,10 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
|
|||||||
/* Copying an element. */
|
/* Copying an element. */
|
||||||
gcc_assert (same_type_ignoring_top_level_qualifiers_p
|
gcc_assert (same_type_ignoring_top_level_qualifiers_p
|
||||||
(atype, TREE_TYPE (init)));
|
(atype, TREE_TYPE (init)));
|
||||||
eltinit = cp_build_array_ref (input_location, init, idx,
|
eltinit = cp_build_array_ref (input_location, init, idx, complain);
|
||||||
tf_warning_or_error);
|
|
||||||
if (!lvalue_p (init))
|
if (!lvalue_p (init))
|
||||||
eltinit = move (eltinit);
|
eltinit = move (eltinit);
|
||||||
eltinit = force_rvalue (eltinit, tf_warning_or_error);
|
eltinit = force_rvalue (eltinit, complain);
|
||||||
eltinit = cxx_eval_constant_expression (&new_ctx, eltinit, lval,
|
eltinit = cxx_eval_constant_expression (&new_ctx, eltinit, lval,
|
||||||
non_constant_p, overflow_p);
|
non_constant_p, overflow_p);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user