Bug 21484 – Infinite recursion in core.memory : GC.{get,set,clr}Attr(const scope void*...)

Status
RESOLVED
Resolution
FIXED
Severity
major
Priority
P1
Component
druntime
Product
D
Version
D2
Platform
All
OS
All
Creation time
2020-12-16T17:48:16Z
Last change time
2020-12-21T01:01:41Z
Keywords
pull
Assigned to
No Owner
Creator
Mathias LANG

Comments

Comment #0 by pro.mathias.lang — 2020-12-16T17:48:16Z
``` 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.
Comment #1 by dlang-bot — 2020-12-16T17:52:33Z
@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
Comment #2 by dlang-bot — 2020-12-17T08:07:46Z
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
Comment #3 by dlang-bot — 2020-12-21T01:01:41Z
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