This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PR c++/71965] silence multi-dim array init sorry without tf_error
- From: Jason Merrill <jason at redhat dot com>
- To: Alexandre Oliva <aoliva at redhat dot com>
- Cc: gcc-patches List <gcc-patches at gcc dot gnu dot org>
- Date: Tue, 20 Mar 2018 12:52:51 -0400
- Subject: Re: [PR c++/71965] silence multi-dim array init sorry without tf_error
- References: <or1sgi3nrl.fsf@lxoliva.fsfla.org>
On Sat, Mar 17, 2018 at 8:11 AM, Alexandre Oliva <aoliva@redhat.com> wrote:
> We shouldn't substitute templates into short-circuited-out concepts
> constraints, but we do, and to add insult to injury, we issue a
> sorry() error when a concept that shouldn't even have been substituted
> attempts to perform a multi-dimensional array initialization with a
> new{} expression.
>
> Although fixing the requirements short-circuiting is probably too
> risky at this point, we can get closer to the intended effect by
> silencing that sorry just as we silence other errors.
>
> for gcc/cp/ChangeLog
>
> PR c++/71965
> * init.c (build_vec_init): Silence sorry without tf_error.
>
> for gcc/testsuite/ChangeLog
>
> PR c++/71965
> * g++.dg/concepts/pr71965.C: New.
> ---
> gcc/cp/init.c | 19 ++++++++++++-------
> gcc/testsuite/g++.dg/concepts/pr71965.C | 27 +++++++++++++++++++++++++++
> 2 files changed, 39 insertions(+), 7 deletions(-)
> create mode 100644 gcc/testsuite/g++.dg/concepts/pr71965.C
>
> diff --git a/gcc/cp/init.c b/gcc/cp/init.c
> index cb62f4886e6d..dcaad730dc86 100644
> --- a/gcc/cp/init.c
> +++ b/gcc/cp/init.c
> @@ -4384,12 +4384,17 @@ build_vec_init (tree base, tree maxindex, tree init,
> else if (TREE_CODE (type) == ARRAY_TYPE)
> {
> if (init && !BRACE_ENCLOSED_INITIALIZER_P (init))
> - sorry
> - ("cannot initialize multi-dimensional array with initializer");
> - elt_init = build_vec_init (build1 (INDIRECT_REF, type, base),
> - 0, init,
> - explicit_value_init_p,
> - 0, complain);
> + {
> + if ((complain & tf_error))
> + sorry ("cannot initialize multi-dimensional"
> + " array with initializer");
> + elt_init = error_mark_node;
This shouldn't even be a sorry anymore; in build_aggr_init, we have
permerror (init_loc, "array must be initialized "
"with a brace-enclosed initializer");
Let's make it a hard error here.
BTW, please include the word "PATCH" in the subject line of patch
submissions. I will also see them faster if you CC me.
Jason