``` import core.memory; const(void)* bug (const(void)* ptr) { GC.getAttr(ptr); return ptr; } void main () { auto ptr = new int*; bug(ptr); } ``` Running this with `dmd -run` never terminates. Fix incoming.
@Geod24 created dlang/druntime pull request #3314 "Fix 21484: Infinite loop in core.memory : GC.{get,set,clr}Attr(const scope void*...)" fixing this issue: - Fix 21484: Infinite loop in core.memory : GC.{get,set,clr}Attr(const scope void*...) Those functions never worked, and would cause an infinite recursion. In a non-optimized build that would exhaust the stack and trigger a SEGV, however in the optimized build we distribute, it results in an infinite loop as tail call optimization is performed. https://github.com/dlang/druntime/pull/3314
dlang/druntime pull request #3314 "Fix 21484: Infinite loop in core.memory : GC.{get,set,clr}Attr(const scope void*...)" was merged into stable: - afec6133be695f2138b86e9b87dcc72a83298379 by Geod24: Fix 21484: Infinite loop in core.memory : GC.{get,set,clr}Attr(const scope void*...) Those functions never worked, and would cause an infinite recursion. In a non-optimized build that would exhaust the stack and trigger a SEGV, however in the optimized build we distribute, it results in an infinite loop as tail call optimization is performed. https://github.com/dlang/druntime/pull/3314
dlang/druntime pull request #3315 "merge stable" was merged into master: - 027fca5c3d57866f06f838fa755c68835c0994b4 by Geod24: Fix 21484: Infinite loop in core.memory : GC.{get,set,clr}Attr(const scope void*...) Those functions never worked, and would cause an infinite recursion. In a non-optimized build that would exhaust the stack and trigger a SEGV, however in the optimized build we distribute, it results in an infinite loop as tail call optimization is performed. https://github.com/dlang/druntime/pull/3315