digitalmars.D - Strange behaviour of enums in for loops
- Lars T. Kyllingstad (19/19) Jul 17 2009 I've found what I believe to be a pretty serious bug in DMD (I've tried
- Lars T. Kyllingstad (4/11) Jul 17 2009 By the way: x becomes NaN after the first iteration, which is why the
- Nick Sabalausky (7/10) Jul 17 2009 Enums have historically been so screwy (buggy) in D maybe people have be...
- Lars T. Kyllingstad (6/18) Jul 18 2009 I'm using D2, and if I'm not mistaken enum is the only way to define
- Max Samukha (5/23) Jul 18 2009 This is obviously a bug. Please add it. A possible workaround:
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
Jul 17 2009
Lars T. Kyllingstad wrote: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".By the way: x becomes NaN after the first iteration, which is why the loop ends. -Lars
Jul 17 2009
"Lars T. Kyllingstad" <public kyllingen.NOSPAMnet> wrote in message news:h3pooc$13ii$1 digitalmars.com...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.Enums have historically been so screwy (buggy) in D maybe people have been avoiding them. Or, maybe I'm not the only one who insists on using "const" for constants instead of "enum", even though D1's const doesn't actually create a true constant (It'd be rare to see an attempt to use a *real* enumeration value in that mannar).
Jul 17 2009
Nick Sabalausky wrote:"Lars T. Kyllingstad" <public kyllingen.NOSPAMnet> wrote in message news:h3pooc$13ii$1 digitalmars.com...I'm using D2, and if I'm not mistaken enum is the only way to define manifest constants. It would be nice to know if anyone can reproduce this bug. In that case I'll add it to Bugzilla. -LarsI 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.Enums have historically been so screwy (buggy) in D maybe people have been avoiding them. Or, maybe I'm not the only one who insists on using "const" for constants instead of "enum", even though D1's const doesn't actually create a true constant (It'd be rare to see an attempt to use a *real* enumeration value in that mannar).
Jul 18 2009
On Sat, 18 Jul 2009 16:55:51 +0200, "Lars T. Kyllingstad" <public kyllingen.NOSPAMnet> wrote:Nick Sabalausky wrote:This is obviously a bug. Please add it. A possible workaround: enum { real ONE = 1.0 } for (real x=0.0; x<=10.0; x+=ONE) writeln(x);"Lars T. Kyllingstad" <public kyllingen.NOSPAMnet> wrote in message news:h3pooc$13ii$1 digitalmars.com...I'm using D2, and if I'm not mistaken enum is the only way to define manifest constants. It would be nice to know if anyone can reproduce this bug. In that case I'll add it to Bugzilla. -LarsI 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.Enums have historically been so screwy (buggy) in D maybe people have been avoiding them. Or, maybe I'm not the only one who insists on using "const" for constants instead of "enum", even though D1's const doesn't actually create a true constant (It'd be rare to see an attempt to use a *real* enumeration value in that mannar).
Jul 18 2009