[Issue 17819] static foreach segfaults on __traits(allMembers)
https://issues.dlang.org/show_bug.cgi?id=17819 --- Comment #9 from github-bugzi...@puremagic.com --- Commits pushed to master at https://github.com/dlang/dmd https://github.com/dlang/dmd/commit/ebbd8e92b61bcf05df443b62deeff0786581067c fix Issue 17819 - static foreach segfaults on __traits(allMembers) https://github.com/dlang/dmd/commit/b625e01f4464768d0e7b1b8119d8f6ca3543efa1 Merge pull request #8213 from tgehr/fix17819 fix Issue 17819 - static foreach segfaults on __traits(allMembers) merged-on-behalf-of: Razvan Nitu --
[Issue 17819] static foreach segfaults on __traits(allMembers)
https://issues.dlang.org/show_bug.cgi?id=17819 github-bugzi...@puremagic.com changed: What|Removed |Added Status|NEW |RESOLVED Resolution|--- |FIXED --
[Issue 17819] static foreach segfaults on __traits(allMembers)
https://issues.dlang.org/show_bug.cgi?id=17819 --- Comment #8 from timon.g...@gmx.ch --- https://github.com/dlang/dmd/pull/8213 --
[Issue 17819] static foreach segfaults on __traits(allMembers)
https://issues.dlang.org/show_bug.cgi?id=17819 --- Comment #7 from timon.g...@gmx.ch --- *** Issue 18718 has been marked as a duplicate of this issue. *** --
[Issue 17819] static foreach segfaults on __traits(allMembers)
https://issues.dlang.org/show_bug.cgi?id=17819 timon.g...@gmx.ch changed: What|Removed |Added CC||timon.g...@gmx.ch --- Comment #6 from timon.g...@gmx.ch --- This is not really a `static foreach` issue, but rather a general issue with how DMD handles (or rather, does not handle) circular dependencies. The following code runs into the same problem: --- module c; static if(__traits(allMembers,__traits(parent,{}))[0]=="c"){} --- Here, DMD explicitly catches the infinite recursion and prints: c.d(3): Error: error evaluating `static if` expression (The code that does this has a bug in it, therefore the error message is not useful: if (exp.op == TOK.error || nest > 100) { error(loc, (nest > 1000) ? "unresolvable circular `static if` expression" : "error evaluating `static if` expression"); return errorReturn(); } ) It is trivial to apply a similar "fix" for `static foreach`, but I doubt this is what Jean-Louis had in mind. Interestingly enough, this "works" with string mixins: module c; mixin("enum "~__traits(allMembers,c)[1]~"2 = 2;"); int x; pragma(msg, x2); pragma(msg, __traits(allMembers,c)[1]); (Clearly, the code actually has no reasonable interpretation, but DMD still successfully compiles it.) This is because `CompileDeclaration.include` just returns null. I can "fix" the `static foreach` case by returning "null" in case a call to "include" is already on the stack. In fact, I could do the same to the `static if` case to make that "work" too. --
[Issue 17819] static foreach segfaults on __traits(allMembers)
https://issues.dlang.org/show_bug.cgi?id=17819 --- Comment #5 from Seb --- https://issues.dlang.org/show_bug.cgi?id=18718 is very related. --
[Issue 17819] static foreach segfaults on __traits(allMembers)
https://issues.dlang.org/show_bug.cgi?id=17819 Seb changed: What|Removed |Added CC||greensunn...@gmail.com See Also||https://issues.dlang.org/sh ||ow_bug.cgi?id=18718 --- Comment #4 from Seb --- Not really a fix, but a start https://github.com/dlang/dmd/pull/8125 --
[Issue 17819] static foreach segfaults on __traits(allMembers)
https://issues.dlang.org/show_bug.cgi?id=17819 bitter.ta...@gmx.com changed: What|Removed |Added CC||bitter.ta...@gmx.com --- Comment #3 from bitter.ta...@gmx.com --- There's a stack overflow in Dsymbol's _foreach, every time it recurses into a AttribDeclaration (such as the `static foreach') the stack gets deeper until it explodes. --
[Issue 17819] static foreach segfaults on __traits(allMembers)
https://issues.dlang.org/show_bug.cgi?id=17819 --- Comment #2 from Jean-Louis Leroy --- Still present in v2.078.3 - it seems that no one is looking into this. --
[Issue 17819] static foreach segfaults on __traits(allMembers)
https://issues.dlang.org/show_bug.cgi?id=17819 Jean-Louis Leroy changed: What|Removed |Added CC||j...@leroy.nyc --
[Issue 17819] static foreach segfaults on __traits(allMembers)
https://issues.dlang.org/show_bug.cgi?id=17819 --- Comment #1 from Jean-Louis Leroy --- The bug is still present in 2.078. --