From a9eba00e1b73fe6ac5f6d3dcad4a015a4e8eb4d4 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Mon, 5 Dec 2011 20:44:50 +0000 Subject: re PR c++/51399 ([c++0x] [4.7 Regression] ICE with invalid initializer list) /cp 2011-12-05 Paolo Carlini PR c++/51399 * init.c (perform_member_init): Early return if init is error_mark_node. /testsuite 2011-12-05 Paolo Carlini PR c++/51399 * g++.dg/cpp0x/initlist62.C: New. From-SVN: r182025 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/init.c | 3 +++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp0x/initlist62.C | 10 ++++++++++ 4 files changed, 23 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/initlist62.C (limited to 'gcc') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ac8e311..414f822 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2011-12-05 Paolo Carlini + PR c++/51399 + * init.c (perform_member_init): Early return if init is error_mark_node. + +2011-12-05 Paolo Carlini + PR c++/51414 * semantics.c (finish_underlying_type): Use %qT, not %qE for the error message. diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 8aa8285..8e28e3b 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -542,6 +542,9 @@ perform_member_init (tree member, tree init) } } + if (init == error_mark_node) + return; + /* Effective C++ rule 12 requires that all data members be initialized. */ if (warn_ecpp && init == NULL_TREE && TREE_CODE (type) != ARRAY_TYPE) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index bf505ce..c78d3f4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-12-05 Paolo Carlini + + PR c++/51399 + * g++.dg/cpp0x/initlist62.C: New. + 2011-12-05 Thomas Koenig PR fortran/51338 diff --git a/gcc/testsuite/g++.dg/cpp0x/initlist62.C b/gcc/testsuite/g++.dg/cpp0x/initlist62.C new file mode 100644 index 0000000..cabbcd1d --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/initlist62.C @@ -0,0 +1,10 @@ +// PR c++/51399 +// { dg-options "-std=c++0x" } + +#include + +struct A +{ + std::initializer_list x[1] = { 0 }; // { dg-error "could not convert" } + A() {} +}; -- cgit v1.1