I've found what I believe to be a pretty serious bug in DMD (I've tried it with DMD 2.031):

   enum real ONE = 1.0;
   for (real x=0.0; x<=10.0; x+=ONE)  writeln(x);

The above loops only once, printing "0". And it gets weirder: Replace real by double, and the program starts a near-infinite loop, spitting out values on the order of 1e-312. Using float gives the same result as real.

Removing "enum" from the declaration of ONE makes the program behave as expected, as does writing "x+=1.0" in the for loop. The following works, which means it's probably not an issue with the += operator in general:

   enum real ONE = 1.0;
   real x = 1.0;
   x += ONE;
   assert (x == 2.0);

I can't seem to find an existing report on this issue in Bugzilla, but I find it hard to believe this hasn't been noticed before. That's why I thought I'd bring it up here before writing a bug report.

-Lars

Reply via email to