Ping.
On Wed, Sep 25, 2013 at 01:08:38PM +0200, Marek Polacek wrote:
> The following testcase ICEd because complete_ctor_at_level_p got
> a union with two initializers - and didn't like that. I think we can
> get away with splicing when sorting the initializers: we already gave
> an error and the program isn't accepted.
>
> Regtested/bootstrapped on x86_64-linux, ok for trunk?
>
> 2013-09-25 Marek Polacek <[email protected]>
>
> PR c++/58510
> cp/
> * init.c (sort_mem_initializers): Splice when giving an error.
> testsuite/
> * g++.dg/cpp0x/pr58510.C: New test.
>
> --- gcc/cp/init.c.mp 2013-09-25 11:50:18.246432664 +0200
> +++ gcc/cp/init.c 2013-09-25 11:50:18.262432728 +0200
> @@ -980,9 +980,12 @@ sort_mem_initializers (tree t, tree mem_
> else if (TREE_VALUE (*last_p) && !TREE_VALUE (init))
> goto splice;
> else
> - error_at (DECL_SOURCE_LOCATION (current_function_decl),
> - "initializations for multiple members of %qT",
> - ctx);
> + {
> + error_at (DECL_SOURCE_LOCATION (current_function_decl),
> + "initializations for multiple members of %qT",
> + ctx);
> + goto splice;
> + }
> }
>
> last_p = p;
> --- gcc/testsuite/g++.dg/cpp0x/pr58510.C.mp 2013-09-25 12:19:02.612137551
> +0200
> +++ gcc/testsuite/g++.dg/cpp0x/pr58510.C 2013-09-25 12:45:13.157119958
> +0200
> @@ -0,0 +1,11 @@
> +// PR c++/58510
> +// { dg-do compile { target c++11 } }
> +
> +void foo()
> +{
> + union
> + { // { dg-error "multiple" }
> + int i = 0;
> + char c = 0;
> + };
> +}
>
> Marek
Marek