== Quote from Don (nos...@nospam.com)'s article > It's in a switch statement somewhere. > It sounds as though this is a bug which involves multiple files, so > it'll be difficult to reduce it. > If you're able to compile DMD, change this line in statement.c line 2620: > Statement *SwitchStatement::semantic(Scope *sc) > { > //printf("SwitchStatement::semantic(%p)\n", this); > tf = sc->tf; > + if (cases) error("xxx"); > assert(!cases); // ensure semantic() is only run once > and then you'll get the line number where the error is.
Yay for first time compiling dmd :) > If you can provide the function which contains the switch statement, > there's a chance I could reproduce it. I've got something better.. a minimal version :) Which even crashes through bud. ---- module main; enum E { A = 0 }; struct S{ int i; static S func( S s, E e ){ switch( e ) //<---------- here { default:return s; } } static const S s_def = { 1 }; //static const S A = func(s_def, E.A ); // forward reference error + crash //static const S[1] ARR = [ E.A : func(s_def, E.A )]; // error : xxx + crash } void main(){} ---- To test all this I switched from 1.065 to 1.066; just to make sure it hadn't been fixed already. And now my project won't compile any more even though bud+1.065 will happily do so.. bud+ 1.066 gives me the following (no crash though) Max # of fixups = 89 Max # of fixups = 4 Max # of fixups = 112 Max # of fixups = 17 Max # of fixups = 2871 Max # of fixups = 233 Max # of fixups = 138 Max # of fixups = 7 Max # of fixups = 353 Max # of fixups = 446 Max # of fixups = 5 Max # of fixups = 4117 Max # of fixups = 37 Max # of fixups = 288 Max # of fixups = 330 Max # of fixups = 338 Max # of fixups = 144 Max # of fixups = 660 Max # of fixups = 51 Max # of fixups = 4 Max # of fixups = 220 Max # of fixups = 2765 Max # of fixups = 12 Max # of fixups = 5 Max # of fixups = 5564 Max # of fixups = 2714 Internal error: backend\cgobj.c 2424 What does that mean?