Example: http://dpaste.dzfl.pl/31b055067ef4 This fails because the while is being checked against a string. Replace "enum" with "string" in main, and it compiles and executes at runtime. I also posted this to the forums, which contains the link to a longer example (after Dustmite, but before manual cleanups): http://forum.dlang.org/thread/jpkvrfzooezplmckofjt@forum.dlang.org#post-qxaqnmoifiubktfuyjcw:40forum.dlang.org It works on LDC 1.076 and DMD 2.x Git (cfb5842b49) (how old is that?), according to Dpaste, but not on DMD 2.065 (both Dpaste and my Ubuntu 64bit). - Olav.
Thanks for the reduced sample, but in the future please paste code samples inline (dpaste can sometimes go offline): ----- string a() { string b; while (b) { } // ICE return ""; } void main() { enum t = a(); string x = t; } ----- $ dmd test.d ----- test.d(12): called from here: a() test.d(12): called from here: a() __error DMD v2.066 DEBUG [] error Internal error: e2ir.c 858 -----
https://github.com/D-Programming-Language/dmd/pull/3422
Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/fa9efd8a5e9df74209c3957ab2f15c834a8a798c fix Issue 12498 - ICE: while(string) causes compiler to crash during CTFE https://github.com/D-Programming-Language/dmd/commit/2c4d8ad711ccb7c94d349830523dd500580b0130 Merge pull request #3422 from 9rnsr/fix12498 Issue 12498 - ICE: while(string) causes compiler to crash during CTFE