OK.
On Wed, Mar 21, 2018 at 5:52 PM, Alexandre Oliva <aol...@redhat.com> wrote: > On Mar 20, 2018, Jason Merrill <ja...@redhat.com> wrote: > >>> - permerror (input_location, >>> - "parenthesized initializer in array new"); >>> + error_at (input_location, >>> + "parenthesized initializer in array new"); > >> I suspect you'll need to make the return unconditional to avoid the >> ICE; OK either way. > > I didn't, but I had to adjust 3 preexisting testcases that relied on > this extension. Last night I still had them with dg-do run, and that > didn't work because compilation fails, so now I've adjusted them to > compile only, and will retest. While at that, I simplified > error_at (input_location, "... > to > error ("... > > I've also updated the patch description and the ChangeLog entry, which I > had failed to do before posting the previous version of the patch. > > I looked for this extension in gcc/doc/extend.texi, to remove it, but I > couldn't find it; is it really not there? > > Ok to install if regstrap succeeds? > > > [PR c++/84729] reject parenthesized array init > > A parenthesized initializer was only accepted when new()ing an array in > permissive mode. We were not careful, however, to convert the > TREE_LIST initializer to the array element type in this extension. > > Instead of fixing it, converting the initializer to the base type > after turning the TREE_LIST initializer to a compound_expr, we disable > this deprecated extension. > > > for gcc/cp/ChangeLog > > PR c++/84729 > * init.c (build_vec_init): Error at parenthesized array init. > > for gcc/testsuite/ChangeLog > > PR c++/84729 > * g++.dg/pr84729.C: New. > * g++.old-deja/g++.ext/arrnew2.C: Require error. > * g++.old-deja/g++.robertl/eb58.C: Likewise. > * g++.old-deja/g++.robertl/eb63.C: Likewise. > --- > gcc/cp/init.c | 7 ++----- > gcc/testsuite/g++.dg/pr84729.C | 7 +++++++ > gcc/testsuite/g++.old-deja/g++.ext/arrnew2.C | 4 ++-- > gcc/testsuite/g++.old-deja/g++.robertl/eb58.C | 4 ++-- > gcc/testsuite/g++.old-deja/g++.robertl/eb63.C | 4 ++-- > 5 files changed, 15 insertions(+), 11 deletions(-) > create mode 100644 gcc/testsuite/g++.dg/pr84729.C > > diff --git a/gcc/cp/init.c b/gcc/cp/init.c > index 15cee17c780c..2263d12563cd 100644 > --- a/gcc/cp/init.c > +++ b/gcc/cp/init.c > @@ -3370,11 +3370,8 @@ build_new_1 (vec<tree, va_gc> **placement, tree type, > tree nelts, > else if (*init) > { > if (complain & tf_error) > - permerror (input_location, > - "parenthesized initializer in array new"); > - else > - return error_mark_node; > - vecinit = build_tree_list_vec (*init); > + error ("parenthesized initializer in array new"); > + return error_mark_node; > } > init_expr > = build_vec_init (data_addr, > diff --git a/gcc/testsuite/g++.dg/pr84729.C b/gcc/testsuite/g++.dg/pr84729.C > new file mode 100644 > index 000000000000..e5d689e0460c > --- /dev/null > +++ b/gcc/testsuite/g++.dg/pr84729.C > @@ -0,0 +1,7 @@ > +// { dg-do compile } > +// { dg-options "-fpermissive" } > + > +typedef int b[2]; > +void a() { > + new b(a); // { dg-error "parenthesized initializer in array new" } > +} > diff --git a/gcc/testsuite/g++.old-deja/g++.ext/arrnew2.C > b/gcc/testsuite/g++.old-deja/g++.ext/arrnew2.C > index c6a967ccc385..aff6b9c7c63b 100644 > --- a/gcc/testsuite/g++.old-deja/g++.ext/arrnew2.C > +++ b/gcc/testsuite/g++.old-deja/g++.ext/arrnew2.C > @@ -1,7 +1,7 @@ > -// { dg-do run } > +// { dg-do compile } > // { dg-options "-w -fpermissive" } > > -int *foo = new int[1](42); // { dg-bogus "" } > +int *foo = new int[1](42); // { dg-error "parenthesized" } > int main () > { > return foo[0] != 42; > diff --git a/gcc/testsuite/g++.old-deja/g++.robertl/eb58.C > b/gcc/testsuite/g++.old-deja/g++.robertl/eb58.C > index 04ec92a30afc..d702296bdc78 100644 > --- a/gcc/testsuite/g++.old-deja/g++.robertl/eb58.C > +++ b/gcc/testsuite/g++.old-deja/g++.robertl/eb58.C > @@ -1,4 +1,4 @@ > -// { dg-do run } > +// { dg-do compile } > // { dg-options "-w -fpermissive" } > // Test for g++ array init extension > > @@ -11,5 +11,5 @@ private: > > main() > { > - A *list = new A[10](4); > + A *list = new A[10](4); // { dg-error "parenthesized" } > } > diff --git a/gcc/testsuite/g++.old-deja/g++.robertl/eb63.C > b/gcc/testsuite/g++.old-deja/g++.robertl/eb63.C > index a49fb02641cd..653351b8dfad 100644 > --- a/gcc/testsuite/g++.old-deja/g++.robertl/eb63.C > +++ b/gcc/testsuite/g++.old-deja/g++.robertl/eb63.C > @@ -1,4 +1,4 @@ > -// { dg-do run } > +// { dg-do compile } > // { dg-options "-w -fpermissive" } > //This uses GNU extensions, so disable -ansi > #include <stdio.h> > @@ -13,5 +13,5 @@ public: > main() { > A* a; > > - a = new A[2](1,false); > + a = new A[2](1,false); // { dg-error "parenthesized" } > } > > > -- > Alexandre Oliva, freedom fighter http://FSFLA.org/~lxoliva/ > You must be the change you wish to see in the world. -- Gandhi > Be Free! -- http://FSFLA.org/ FSF Latin America board member > Free Software Evangelist|Red Hat Brasil GNU Toolchain Engineer