From fe69277d6650978749d17d11f488230cee1b2ad9 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 15 Feb 2016 16:13:57 -0500 Subject: [PATCH] re PR c++/68890 (ICE in verify_ctor_sanity, at cp/constexpr.c:2113) PR c++/68890 * constexpr.c (verify_ctor_sanity): Remove CONSTRUCTOR_NELTS check. From-SVN: r233430 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/constexpr.c | 3 ++- gcc/testsuite/g++.dg/cpp0x/constexpr-value5.C | 18 ++++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/constexpr-value5.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3f2177f87ec..85473df23d5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2016-02-15 Jason Merrill + + PR c++/68890 + * constexpr.c (verify_ctor_sanity): Remove CONSTRUCTOR_NELTS check. + 2016-02-12 Patrick Palka PR c++/69098 diff --git a/gcc/cp/constexpr.c b/gcc/cp/constexpr.c index 85fc64ed8cc..11037fb62ca 100644 --- a/gcc/cp/constexpr.c +++ b/gcc/cp/constexpr.c @@ -2202,7 +2202,8 @@ verify_ctor_sanity (const constexpr_ctx *ctx, tree type) gcc_assert (ctx->ctor); gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (ctx->ctor))); - gcc_assert (CONSTRUCTOR_NELTS (ctx->ctor) == 0); + /* We used to check that ctx->ctor was empty, but that isn't the case when + the object is zero-initialized before calling the constructor. */ if (ctx->object) gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (ctx->object))); diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-value5.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-value5.C new file mode 100644 index 00000000000..8928b671de7 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-value5.C @@ -0,0 +1,18 @@ +// PR c++/68890 +// { dg-do compile { target c++11 } } + +class ptr; +template struct A { typedef ptr _Type[_Nm]; }; +template struct B { typename A<_Nm>::_Type _M_elems; }; +template class FixedVector : B { +public: + typedef B<1> base; + constexpr FixedVector() : base(), size_() {} + char size_; +}; +class ptr { +public: + constexpr ptr() : px_(){}; + int px_; +}; +FixedVector<1> a; -- 2.30.2