[Issue 19731] New: auto struct methods whose address is taken don't test invariants
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Tue Mar 12 14:10:55 UTC 2019
    
    
  
https://issues.dlang.org/show_bug.cgi?id=19731
          Issue ID: 19731
           Summary: auto struct methods whose address is taken don't test
                    invariants
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: default_357-line at yahoo.de
Consider the following code:
struct Foo
{
    Object obj_;
    invariant (obj_ !is null);
    auto obj()
    {
        return this.obj_;
    }
    enum compiles = __traits(compiles, &Foo.init.obj);
}
void main()
{
    Foo foo = Foo();
    foo.obj.toString();
}
foo.obj should hit the invariant, but because Foo.obj straight up does not call
the invariant check at all, we instead hit a segfault in toString.
The code works if the return type is not auto, or if the `enum compiles` line
is removed.
--
    
    
More information about the Digitalmars-d-bugs
mailing list