[Issue 19752] New: dip1000 isn't @safe if struct contains a slice
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Tue Mar 19 11:26:45 UTC 2019
    
    
  
https://issues.dlang.org/show_bug.cgi?id=19752
          Issue ID: 19752
           Summary: dip1000 isn't @safe if struct contains a slice
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: critical
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: atila.neves at gmail.com
The code below compiles as expected with dip100. It's @safe because `range`'s
return value has the lifetime extended from the `this` parameter:
--------------------------------
struct Container {
    auto range() @safe return scope {
        static struct Range {
            Container *self;
        }
        return Range(&this);
    }
}
--------------------------------
Trying to escape the result of `range` then fails to compile, as expected.
However, adding a slice member variable to the struct above causes this:
----------------------------------
struct Container {
    // as before
    int[] ints;
----------------------------------
$ dmd -preview=dip1000 bug2.d
bug2.d(10): Error: cannot take address of scope parameter this in @safe
function range
>From the original DIP, it's to be expected that `ints` would have the same
lifetime as `this` and things should work. This is particularly bad because if
the programmer attempts a workaround the code below compiles and shouldn't:
https://github.com/atilaneves/automem/issues/26
--
    
    
More information about the Digitalmars-d-bugs
mailing list