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