[Issue 15618] New: [REG-master] Class member layout has been changed, ABI needs to be updated?
    via Digitalmars-d-bugs 
    digitalmars-d-bugs at puremagic.com
       
    Thu Jan 28 06:24:19 PST 2016
    
    
  
https://issues.dlang.org/show_bug.cgi?id=15618
          Issue ID: 15618
           Summary: [REG-master] Class member layout has been changed, ABI
                    needs to be updated?
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: regression
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: k.hara.pg at gmail.com
To fix issue 15579, PR 5361 was merged.
https://github.com/D-Programming-Language/dmd/pull/5361.
But I noticed that it has changed extern (D) class layout, not only for extern
(C++).
https://github.com/D-Programming-Language/dmd/pull/5361/files#r51126555
Test case:
extern (D) //extern (C++)
{
    class Base
    {
        ~this() {}
        size_t x = 4;
    }
    interface Interface
    {
        int Method();
    }
    class Derived : Base, Interface
    {
        size_t y = 5;
        int Method() { return 3; }
    }
}
void main()
{
    Derived d;                  // dmd 2.069             master
    pragma(msg, d.x.offsetof);  // (void*).sizeof * 2
    pragma(msg, d.y.offsetof);  // (void*).sizeof * 3 -> 4
}
I'm not sure it was expected, so I open this regression issue. If it's an
intentional change, we should update http://dlang.org/spec/abi ABI page, so
there's an explanation for D class object layout.
--
    
    
More information about the Digitalmars-d-bugs
mailing list