The following valid code snippet triggers an ICE on trunk: ======================== struct A {}; struct B : virtual A { constexpr B() {} }; ======================== bug.cc: In constructor 'constexpr B::B()': bug.cc:5:18: internal compiler error: in build_data_member_initialization, at cp/semantics.c:5781 Please submit a full bug report, [etc.]
This is not valid code; a class with virtual bases cannot have a constexpr constructor.
Author: paolo Date: Tue Dec 20 10:38:44 2011 New Revision: 182526 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=182526 Log: /cp 2011-12-20 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51612 * semantics.c (is_valid_constexpr_fn): In case of constexpr constructors also check for virtual base classes. /testsuite 2011-12-20 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51612 * g++.dg/cpp0x/constexpr-ice4.C: New. Added: trunk/gcc/testsuite/g++.dg/cpp0x/constexpr-ice4.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/semantics.c trunk/gcc/testsuite/ChangeLog
Fixed for 4.7.0.