[Issue 20564] New: Member function increases struct size when the struct is defined in a function
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Fri Feb  7 11:57:45 UTC 2020
    
    
  
https://issues.dlang.org/show_bug.cgi?id=20564
          Issue ID: 20564
           Summary: Member function increases struct size when the struct
                    is defined in a function
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: regression
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: kiithsacmp at gmail.com
Adding a method to a struct definition in a function increases the struct size.
Build this code to reproduce:
```
void fun()
{
    struct InnerFun
    {
        ubyte a;
        void fun() {}
    }
    struct InnerNoFun
    {
        ubyte a;
    }
    // prints 16, expected 1
    pragma(msg, "InnerFun ",   InnerFun.sizeof);
    // prints 1
    pragma(msg, "InnerNoFun ", InnerNoFun.sizeof);
}
struct OuterFun
{
    ubyte a;
    void fun() {}
}
struct OuterNoFun
{
    ubyte a;
}
// prints 1
pragma(msg, "OuterFun ", OuterFun.sizeof);
// prints 1
pragma(msg, "OuterNoFun ", OuterNoFun.sizeof);
void main(){}
```
Actual results:
```
OuterFun 1LU
OuterNoFun 1LU
InnerFun 16LU
InnerNoFun 1LU
```
Expected results:
```
OuterFun 1LU
OuterNoFun 1LU
InnerFun 1LU
InnerNoFun 1LU
```
Reproduced on DMD 2.090, DMD 2.086, LDC 1.8.0 (based on DMD 2.078.3) on Ubuntu
18.04
Discovered while trying out `std.bitmanip.bitfields!()` in a unittest, where
generated methods broke the test.
--
    
    
More information about the Digitalmars-d-bugs
mailing list