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

/*
PERMUTE_ARGS:
REQUIRED_ARGS: -O -release
*/


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

auto pa() pure nothrow {return new int;}

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

        if (p1 is p2) assert(0);

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

        if (a1 is a2) assert(0);

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

        if (o1 is o2) assert(0);
    }
    // LDC: no common subexpression elimination (CSE)
    version (LDC) {}
    else
    {
        auto p1 = pa();
        auto p2 = pa();

        if (p1 is p2) assert(0);
    }
}
