import core.memory;

// TODO: The following should work, but L10 (second assert) fails.
version(none) void dotest(T) (T* ptr)
{
    GC.clrAttr(ptr, uint.max);
    assert(GC.getAttr(ptr) == 0);

    GC.setAttr(ptr, GC.BlkAttr.NO_MOVE);
    assert(GC.getAttr(ptr) == GC.BlkAttr.NO_MOVE);

    GC.clrAttr(ptr, GC.BlkAttr.NO_MOVE);
    assert(GC.getAttr(ptr) == 0);
    GC.clrAttr(ptr, GC.BlkAttr.NO_MOVE);
    assert(GC.getAttr(ptr) == 0);
}
else void dotest(T) (T* ptr)
{
    // https://issues.dlang.org/show_bug.cgi?id=21484
    GC.clrAttr(ptr, uint.max);
    GC.setAttr(ptr, GC.BlkAttr.NO_MOVE);
    GC.getAttr(ptr);
}

void main ()
{
    auto ptr = new int;
    dotest!(const(int))(ptr);
    dotest!(int)(ptr);
}