www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 20724] New: Compiler fails to infer safe

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

          Issue ID: 20724
           Summary: Compiler fails to infer  safe
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: major
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: andrej.mitrovich gmail.com

-----
public void hash (T) (scope const auto ref T record) //  safe  // uncomment to
compile
    if (is(T == struct))
{
    foreach (const ref field; record.tupleof)
    {
        hash(field);
    }
}

public void hash (T) (scope const auto ref T[] records)  safe
{
    foreach (ref record; records)
        hash(record);
}

 safe void main ()
{
    struct Foo
    {
        Foo[] foo;
    }

    Foo foo;
    hash(foo);
}
-----

$ dmd test.d
$ test.d(15): Error:  safe function test.hash!(Foo).hash cannot call  system
function test.hash!(Foo).hash
$ test.d(3):        test.hash!(Foo).hash is declared here

Uncommenting ' safe' makes it compile. The safety should have been inferred.

--
Apr 07 2020