On Thursday, 24 December 2020 at 23:58:45 UTC, Elronnd wrote:
On Thursday, 24 December 2020 at 23:46:58 UTC, Elronnd wrote:
reduced version:

Further reduction: Alloc1 can just be ‘AllocatorList!(n => Region!Mallocator(MB))’.

Thank you for the reduced test case.

A small change to the test case seems to work in all the cases I've tested so far, maybe it can help diagnose the issue. If we use a pointer to construct the allocator, it seems to work fine:

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;
        import core.memory: GC;
        import std.stdio;

        enum MB = 1024 * 1024;
        {
alias Alloc1 = AllocatorList!(n => Region!Mallocator(MB));
                auto a1 = Alloc1();
                auto alloc1 = allocatorObject(&a1);

                GC.collect;
                alloc1.allocate(MB);
        }

writeln(5); // this never gets printed; segfault happens upon exiting the above scope
}

Reply via email to