This causes a segfault when run with rdmd -gx:

void main()
{
import std.experimental.allocator : allocatorObject, expandArray; import std.experimental.allocator.building_blocks.allocator_list : AllocatorList; import std.experimental.allocator.building_blocks.region : Region; import std.experimental.allocator.building_blocks.fallback_allocator : FallbackAllocator;
    import std.experimental.allocator.mallocator : Mallocator;

    {
        alias Alloc1 = FallbackAllocator!(
            AllocatorList!(n => Region!Mallocator(1024*1024)),
            Mallocator);
        auto alloc1 = allocatorObject(Alloc1());
        for (int ttt=0; ttt<10; ++ttt)
        {
            import std.stdio : writeln;
            writeln(ttt);
            import core.memory : GC;

            auto p = alloc1.allocate(60*1024);
            assert(p.length == 60*1024);
            auto p2 = alloc1.allocate(3*1024*1024);
            assert(p2.length == 3*1024*1024);
            GC.collect();
            alloc1.expandArray(p, 120*1024); // Segfault here
        }
    }
}


(Tested on DMD 2.094.2 and on https://run.dlang.io/is/p0FsOQ)

If the "GC.collect()" line is commented out, it works somehow.

Please help me understand why this is happening. This is a very reduced example of an issue I am facing.

Thank You,
Saurabh

Reply via email to