From 358b9253c104e94701f6a52dfedac8c18269a0a7 Mon Sep 17 00:00:00 2001 From: Dodji Seketeli Date: Mon, 2 Jan 2012 17:00:13 +0000 Subject: [PATCH] PR c++/51462 - ICE in cx_check_missing_mem_inits gcc/cp/ PR c++/51462 * semantics.c (cx_check_missing_mem_inits): Don't assert in case of error. gcc/testsuite/ PR c++/51462 * g++.dg/cpp0x/constexpr-99.C: New test. From-SVN: r182806 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/semantics.c | 3 ++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp0x/constexpr-99.C | 13 +++++++++++++ 4 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/constexpr-99.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 7b91727aca9..23f3ae020a3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-01-02 Dodji Seketeli + + PR c++/51462 + * semantics.c (cx_check_missing_mem_inits): Don't assert in case + of error. + 2012-01-02 Paolo Carlini PR c++/20140 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 835632fcfba..55b0a0215ea 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -6051,7 +6051,8 @@ cx_check_missing_mem_inits (tree fun, tree body, bool complain) /* It's OK to skip a member with a trivial constexpr ctor. A constexpr ctor that isn't trivial should have been added in by now. */ - gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype)); + gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype) + || errorcount != 0); continue; } error ("uninitialized member %qD in % constructor", diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index ea547a3f70a..ad865dbbbe5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-01-02 Dodji Seketeli + + PR c++/51462 + * g++.dg/cpp0x/constexpr-99.C: New test. + 2012-01-02 Paolo Carlini PR c++/20140 diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-99.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-99.C new file mode 100644 index 00000000000..13a5ea3e6c2 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-99.C @@ -0,0 +1,13 @@ +// Origin PR c++/51462 +// { dg-options "-std=c++11" } + +struct A +{ + int i = 0; +}; + +struct B +{ + A a; + constexpr B() : a(0) {} // { dg-error "no matching function" } +};