[Issue 15862] New: dmd thinks functions are strongly pure despite mutable indirections in the return type

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Fri Apr 1 11:16:55 PDT 2016


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

          Issue ID: 15862
           Summary: dmd thinks functions are strongly pure despite mutable
                    indirections in the return type
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Keywords: wrong-code
          Severity: major
          Priority: P1
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: ag0aep6g at gmail.com

dmd thinks functions are strongly pure despite mutable indirections in the
return type

----
int* p() pure nothrow {return new int;}
int[] a() pure nothrow {return [0];}
Object o() pure nothrow {return new Object;}

void main()
{
    int* p1 = p();
    int* p2 = p();

    if (p1 is p2) throw new Exception("pointers same");

    int[] a1 = a();
    int[] a2 = a();

    if (a1 is a2) throw new Exception("arrays same");

    Object o1 = o();
    Object o2 = o();

    if (o1 is o2) throw new Exception("objects same");
}
----

No exceptions should be thrown. All is fine when compiled without optimization
flags. When compiled with `dmd -O -release`, the exceptions are thrown.

ldc does not seem to have the same issue.

--


More information about the Digitalmars-d-bugs mailing list