digitalmars.D.bugs - [Issue 21392] New: extern(C++) No support for virtual inheritance ABI
- d-bugmail puremagic.com (69/69) Nov 14 2020 https://issues.dlang.org/show_bug.cgi?id=21392
https://issues.dlang.org/show_bug.cgi?id=21392 Issue ID: 21392 Summary: extern(C++) No support for virtual inheritance ABI Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: enhancement Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: ibuclaw gdcproject.org Example program --- #include <stdio.h> struct A { virtual void f2 () {}; virtual void f3 () {}; }; struct B : virtual public A { virtual void f3 () {}; }; struct C : public A, public B { virtual void f4 () {}; }; struct D : virtual public B, virtual public C, virtual public A { virtual void f2 () { }; virtual void f3 () { printf("this = %p\n", this); } virtual void f4 () { }; virtual void f5 () { }; virtual void f6 () { }; }; D *makeD() { return new D; } --- extern(C++, struct) { interface A { void f2(); void f3(); } interface B : A { void f3(); } interface C : A, B { void f4(); } interface D : B, C, A { void f2(); void f3(); void f4(); void f5(); void f6(); } D makeD(); } int main() { C c = makeD(); (cast(B)c).f3(); // !!! SEGV !!! return 0; } --- --
Nov 14 2020