https://issues.dlang.org/show_bug.cgi?id=21212

          Issue ID: 21212
           Summary: [DIP1000] taking `ref` parameter address check leaking
                    when dip1000 is enabled
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Mac OS X
            Status: NEW
          Severity: regression
          Priority: P1
         Component: dmd
          Assignee: nob...@puremagic.com
          Reporter: outland.kar...@gmail.com

When enabled DIP1000, DMD(v2.093.1) allow taking `ref` parameter address.
But it should be compile error as disabled DIP1000.


reduced code by ag0aep6g
https://forum.dlang.org/post/rii2s5$2ms5$1...@digitalmars.com

----
class MinPointerRecorder
{
    int* minPrice;
    void update(ref int price) @safe
    {
        minPrice = &price; /* Should not compile. */
    }
}

void main() @safe
{
    auto r = new MinPointerRecorder;
    () { int mp = 42; r.update(mp); } ();
    () { ulong[1000] stomp = 13; } ();
    import std.stdio: writeln;
    writeln(*r.minPrice); /* Prints "13". */
}
----

rdmd result
(v2.093.1 Darwin Kernel Version 19.6.0 x86_64)
----
% dmd --version
DMD64 D Compiler v2.093.1
% rdmd -preview=dip1000 issue.d
13
% rdmd issue.d 
issue.d(6): Error: cannot take address of parameter price in @safe function
update
----

--

Reply via email to