Bug 19465 – dmd segfaults on endless mixin recursion

Status
NEW
Severity
major
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2018-12-04T14:14:03Z
Last change time
2024-12-13T19:01:32Z
Keywords
ice
Assigned to
No Owner
Creator
Dennis
Moved to GitHub: dmd#19514 →

Comments

Comment #0 by dkorpel — 2018-12-04T14:14:03Z
Code: ``` enum string s = "__traits(compiles, mixin(s))"; static if (__traits(compiles, mixin(s))) { enum b = 2; } ``` Output: Segmentation fault (core dumped) Concocted example, not something I encountered in actual code. Still, "dmd should never segfault" so filing this as a minor bug.
Comment #1 by uplink.coder — 2018-12-04T16:43:06Z
Hmm, I think if you are asking for a stack-overflow you should not be surprised if you get it. This is one of these problems which you get by interpreting a turing-complete language at compile-time. Introducing an artificial recursion limit has been done, but people (weka) had to increase it in their fork. Checking for a limit is not _huge_ deal but it is work which does not have to be done.
Comment #2 by dkorpel — 2018-12-04T21:42:58Z
Yeah, I don't know if/how this should be "fixed", but notably endless recursion in CTFE: `` enum a = f(); int f() {return f();} ``` Results in: Error: function `onlineapp.f` CTFE recursion limit exceeded While endless recursion in mixin without __traits(compiles, ...): ``` enum string s = "mixin(s);"; mixin(s); ``` Results in, after a while: Error: out of memory
Comment #3 by robert.schadek — 2024-12-13T19:01:32Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/19514 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB