diff options
author | Jason Merrill <jason@redhat.com> | 2018-05-15 17:56:34 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2018-05-15 17:56:34 -0400 |
commit | dc5ca6c86f08b0dc571a8400d89572ce4bf911c7 (patch) | |
tree | 52a2c3724196b8ac2721d3c7398cfbc3e3606742 /gcc | |
parent | 30a52a6d629ebe46c788940c1cbe518e4d5cbd5a (diff) | |
download | gcc-dc5ca6c86f08b0dc571a8400d89572ce4bf911c7.zip gcc-dc5ca6c86f08b0dc571a8400d89572ce4bf911c7.tar.gz gcc-dc5ca6c86f08b0dc571a8400d89572ce4bf911c7.tar.bz2 |
* constexpr.c (cxx_eval_vec_init_1): Pass tf_none if ctx->quiet.
From-SVN: r260273
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/cp/constexpr.c | 13 |
2 files changed, 8 insertions, 7 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fe80f72..912a96c 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,7 @@ 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 ?: * call.c (build_conditional_expr_1): Don't force_rvalue when one arm is a throw-expression. diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index 9ee37de..8c6ec55 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -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); bool pre_init = false; 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 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. */; else if (value_init) { - init = build_value_init (elttype, tf_warning_or_error); + init = build_value_init (elttype, complain); pre_init = true; } 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 (); init = build_special_member_call (NULL_TREE, complete_ctor_identifier, &argvec, elttype, LOOKUP_NORMAL, - tf_warning_or_error); + complain); release_tree_vector (argvec); init = build_aggr_init_expr (TREE_TYPE (init), init); pre_init = true; @@ -2981,8 +2982,7 @@ cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init, reuse = i == 0; } else - eltinit = cp_build_array_ref (input_location, init, idx, - tf_warning_or_error); + eltinit = cp_build_array_ref (input_location, init, idx, complain); eltinit = cxx_eval_vec_init_1 (&new_ctx, elttype, eltinit, value_init, lval, 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. */ gcc_assert (same_type_ignoring_top_level_qualifiers_p (atype, TREE_TYPE (init))); - eltinit = cp_build_array_ref (input_location, init, idx, - tf_warning_or_error); + eltinit = cp_build_array_ref (input_location, init, idx, complain); if (!lvalue_p (init)) 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, non_constant_p, overflow_p); } |