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).