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