https://issues.dlang.org/show_bug.cgi?id=18937
Issue ID: 18937 Summary: [REG 2.080.0] std.experimental.allocator: compiling `make` needs an unreasonable amount of memory for structs that contain static arrays Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: regression Priority: P1 Component: phobos Assignee: nob...@puremagic.com Reporter: ag0ae...@gmail.com test.d: ---- import std.experimental.allocator: make; @safe unittest { static struct S { version (small) ubyte[1024] data; else version (large) ubyte[4 * 1024] data; else version (vlarg) ubyte[16 * 1024] data; else static assert(false); } static struct SomeAllocator { ubyte[] allocate(size_t) { return []; } void deallocate(void[]) {} } auto x = SomeAllocator().make!S(); } ---- With 2.079.1, all three versions compile quickly, and DMD needs about 40 MiB of memory for all of them. With 2.080.0, compilation needs an unreasonable amount of time and memory. The vlarg version exceeds 4 GiB and 1 minute. `for dmd in dmd2.079 dmd2.080; do for v in -version=small -version=large -version=vlarg; do /usr/bin/time -f "$dmd $v: time: %E, memory: %M KiB" $dmd -c -unittest $v test.d; done; done`: ---- dmd2.079 -version=small: time: 0:00.12, memory: 40272 KiB dmd2.079 -version=large: time: 0:00.11, memory: 40368 KiB dmd2.079 -version=vlarg: time: 0:00.12, memory: 40920 KiB dmd2.080 -version=small: time: 0:00.43, memory: 133276 KiB dmd2.080 -version=large: time: 0:04.52, memory: 1342532 KiB Error: out of memory Command exited with non-zero status 1 dmd2.080 -version=vlarg: time: 1:29.09, memory: 3713344 KiB ---- The culprit seems to be std.experimental.allocator.common.isAllZeroBits. I'm looking into fixing this there. --