From 2ef7251f6cd9e228cafa3473929ff55c9cb56928 Mon Sep 17 00:00:00 2001 From: Marek Polacek Date: Thu, 3 Oct 2013 16:33:23 +0000 Subject: [PATCH] re PR c++/58510 ([c++11] ICE with multiple non-static data initializations in union) PR c++/58510 cp/ * init.c (sort_mem_initializers): Splice when giving an error. testsuite/ * g++.dg/cpp0x/pr58510.C: New test. From-SVN: r203165 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/init.c | 9 ++++++--- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp0x/pr58510.C | 11 +++++++++++ 4 files changed, 27 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/pr58510.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c984f9030f3..0769847be94 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2013-10-03 Marek Polacek + + PR c++/58510 + * init.c (sort_mem_initializers): Splice when giving an error. + 2013-10-02 Paolo Carlini PR c++/58535 diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 8fabdcdb948..70e7294c4d3 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -980,9 +980,12 @@ sort_mem_initializers (tree t, tree mem_inits) 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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 6ea99fb73ff..6e4a4e47321 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-10-03 Marek Polacek + + PR c++/58510 + * g++.dg/cpp0x/pr58510.C: New test. + 2013-10-03 Marc Glisse PR c++/19476 diff --git a/gcc/testsuite/g++.dg/cpp0x/pr58510.C b/gcc/testsuite/g++.dg/cpp0x/pr58510.C new file mode 100644 index 00000000000..71f25209826 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr58510.C @@ -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; + }; +} -- 2.30.2