On 26 January 2016 at 15:11, Walter Bright via Digitalmars-d <[email protected]> wrote: > On 1/25/2016 9:02 PM, Manu via Digitalmars-d wrote: >> >> On 24 January 2016 at 20:40, Walter Bright via Digitalmars-d >> <[email protected]> wrote: >>> >>> On 1/22/2016 5:46 PM, Manu via Digitalmars-d wrote: >>>> >>>> >>>> I brought a work laptop home this weekend in anticipation ;) >>> >>> >>> >>> Here ya go: >>> >>> https://github.com/D-Programming-Language/dmd/pull/5364 >>> >>> Be wary of: >>> >>> https://issues.dlang.org/show_bug.cgi?id=15589 >>> >>> and use the workaround as necessary. This is lower priority, so I won't >>> be >>> dealing with it for a bit. >> >> >> Next blocker: https://issues.dlang.org/show_bug.cgi?id=15610 >> >> C++ methods with multiple-inheritence expect that 'this' is a pointer >> to the base class that introduced the function. >> When using C++ 'interface's, which C++ just treats like normal >> multiple-inheritence, C++ expects that the 'this' pointer is adjusted >> to the offset of the interface's vtable. >> >> If I have: >> extern(C++) interface Interface { voif f(); } >> extern(C++) class C : Base, Interface >> { >> void f(); >> } >> >> Calling c.f(), D is passing 'this' unaltered, but C++ expects 'this' >> is a pointer to 'Interface', and then it crashes accessing members at >> incorrect offsets. >> > > The PR 5364 does this. (And only Microsoft Win64 has this effect.)
Oh okay. I thought that PR was about correctly locating the vtable and function offsets. I'll wait till that's merged.
