public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
* [Bug c++/55922] New: brace initializing parent cause bogus virtual base constructor calls @ 2013-01-09 17:40 nicolas.cavallari at lri dot fr 2013-01-09 17:43 ` [Bug c++/55922] " nicolas.cavallari at lri dot fr ` (2 more replies) 0 siblings, 3 replies; 4+ messages in thread From: nicolas.cavallari at lri dot fr @ 2013-01-09 17:40 UTC (permalink / raw) To: gcc-bugs 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: unassigned@gcc.gnu.org ReportedBy: nicolas.cavallari@lri.fr 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=... ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/55922] brace initializing parent cause bogus virtual base constructor calls 2013-01-09 17:40 [Bug c++/55922] New: brace initializing parent cause bogus virtual base constructor calls nicolas.cavallari at lri dot fr @ 2013-01-09 17:43 ` nicolas.cavallari at lri dot fr 2015-06-25 10:16 ` redi at gcc dot gnu.org 2021-08-10 16:30 ` pinskia at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: nicolas.cavallari at lri dot fr @ 2013-01-09 17:43 UTC (permalink / raw) To: gcc-bugs http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55922 --- Comment #1 from nicolas.cavallari at lri dot fr 2013-01-09 17:42:47 UTC --- Created attachment 29129 --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=29129 same source with more outputs. Example output of what i have on my system with this attachment : Base ctor is called at 0x7fffb7eeb474 Base ctor is called at 0x7fffb7eeb468 A1::Base is at 0x7fffb7eeb468 B1::Base is at 0x7fffb7eeb468 Base ctor is called at 0x7fffb7eeb470 A2::Base is at 0x7fffb7eeb470 C::Base is at 0x7fffb7eeb474 2 2 3 Standard output should read "1 2 3". ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/55922] brace initializing parent cause bogus virtual base constructor calls 2013-01-09 17:40 [Bug c++/55922] New: brace initializing parent cause bogus virtual base constructor calls nicolas.cavallari at lri dot fr 2013-01-09 17:43 ` [Bug c++/55922] " nicolas.cavallari at lri dot fr @ 2015-06-25 10:16 ` redi at gcc dot gnu.org 2021-08-10 16:30 ` pinskia at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: redi at gcc dot gnu.org @ 2015-06-25 10:16 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55922 --- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- bool called = false; struct Base { Base() { if (called) throw 1; called = true; } }; struct B1 : virtual Base { B1() { } }; struct C : B1, virtual Base { C() : #ifdef FIX B1() #else B1{} #endif { } }; int main() { C c; } ^ permalink raw reply [flat|nested] 4+ messages in thread
* [Bug c++/55922] brace initializing parent cause bogus virtual base constructor calls 2013-01-09 17:40 [Bug c++/55922] New: brace initializing parent cause bogus virtual base constructor calls nicolas.cavallari at lri dot fr 2013-01-09 17:43 ` [Bug c++/55922] " nicolas.cavallari at lri dot fr 2015-06-25 10:16 ` redi at gcc dot gnu.org @ 2021-08-10 16:30 ` pinskia at gcc dot gnu.org 2 siblings, 0 replies; 4+ messages in thread From: pinskia at gcc dot gnu.org @ 2021-08-10 16:30 UTC (permalink / raw) To: gcc-bugs https://gcc.gnu.org/bugzilla/show_bug.cgi?id=55922 Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Target Milestone|--- |7.0 Resolution|--- |FIXED Status|ASSIGNED |RESOLVED --- Comment #16 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Fixed so closing. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2021-08-10 16:30 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2013-01-09 17:40 [Bug c++/55922] New: brace initializing parent cause bogus virtual base constructor calls nicolas.cavallari at lri dot fr 2013-01-09 17:43 ` [Bug c++/55922] " nicolas.cavallari at lri dot fr 2015-06-25 10:16 ` redi at gcc dot gnu.org 2021-08-10 16:30 ` pinskia at gcc dot gnu.org
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).