http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55922
Bug #: 55922
Summary: brace initializing parent cause bogus virtual base
constructor calls
Classification: Unclassified
Product: gcc
Version: 4.7.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: [email protected]
ReportedBy: [email protected]
Host: x86_64-unknown-linux-gnu
Target: x86_64-unknown-linux-gnu
Created attachment 29128
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29128
minimal program which does not work.
The attached minimal c++11 source compiles with g++ -std=c++11 minimal.c++, but
the program does not run as expected (indicated by a non-zero exit value).
Using clang works.
The same source with debug outputs shows that the virtual base constructor is
called more than once upon initialization with bogus 'this' pointers. Not all
classes agree on the offset to the virtual base. This causes silent member
corruption (and ultimately crashes if some of the members are pointers).
Replacing brace initializers for B1 and A2 with C++03 parentheses initializers
makes the problem go away.
Bug is also reproducible on trunk@195009 configured with ./configure
--enable-languages=c,c++ --prefix=...