http://d.puremagic.com/issues/show_bug.cgi?id=6337
Summary: ICE when touching member variable of struct during CTFE Product: D Version: D2 Platform: Other OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nob...@puremagic.com ReportedBy: johann.macdon...@gmail.com --- Comment #0 from Johann MacDonagh <johann.macdon...@gmail.com> 2011-07-16 20:37:26 PDT --- This one is weird. I narrowed it down to this test case, although I admit this is still pretty long. struct Test { string s; this(string s) { this.s = s; } string ctfe() { dchar c = s[0]; if (test1(c)) { for (c = next(c); test2(c); c = next(c)) { } } return "ctfe"; } dchar next(dchar curPeek) { if (curPeek != dchar.init) { s = s[1..$]; return s.length > 0 ? s[0] : dchar.init; } return dchar.init; } } bool test1(dchar c) { return (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c == '_'); } bool test2(dchar c) { return (test1(c) || c >= '0' && c <= '9' ); } void main(string[] args) { // If this is auto then this executes just fine at runtime enum x = Test("abc").ctfe(); } This will ICE with an out of memory error. I believe it's going into an infinite loop. If you replace the body of test2 with "return false", then CTFE runs just fine. This only happens on 2.054. On 2.053 (when you make appropriate modifications to the test case) it crashes DMD. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------