Bug 33 – No short-circuit evaluation for compile-time expressions?

Status
RESOLVED
Resolution
FIXED
Severity
normal
Priority
P2
Component
dmd
Product
D
Version
D1 (retired)
Platform
x86
OS
Windows
Creation time
2006-03-10T13:46:00Z
Last change time
2014-02-15T02:08:32Z
Assigned to
bugzilla
Creator
sean

Comments

Comment #0 by sean — 2006-03-10T13:46:11Z
I think this is arguably not a bug in the same way that compile-time "?:" expressions evaluate both their arguments regardless of which is selected, but it's definately non-intuitive: C:\code\d\bugs>type 149_2.d import std.c.stdio; void main() { static if( int.mangleof.length > 1 && int.mangleof[1] == 'x' ) printf( "'x' as second char\n" ); } C:\code\d\bugs>dmd 149_2.d 149_2.d(5): array index [1] is outside array bounds [0 .. 1] C:\code\d\bugs>
Comment #1 by clugdbug — 2006-03-13T07:25:15Z
Definitely a bug -- but maybe not in &&. This example compiles: void main() { const char [] s = int.mangleof; static if( s.length > 1 && s[1] == 'x' ) printf( "'x' as second char\n" ); } And this one gives a quite bizarre error message: void main() { const char [] s = (int*).mangleof; static if( s.length > 1 && s[2] == 'x' ) printf( "'x' as second char\n" ); } something about TOK58 doesn't evaluate to a boolean.
Comment #2 by thomas-dloop — 2006-03-21T04:50:38Z
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 [email protected] schrieb am 2006-03-13: > > And this one gives a quite bizarre error message: > > void main() > { > const char [] s = (int*).mangleof; > static if( s.length > 1 && s[2] == 'x' ) > printf( "'x' as second char\n" ); > } > > something about TOK58 doesn't evaluate to a boolean. The code above is buggy. s="ab" will result in an ArrayBoundsError. Added to DStress http://dstress.kuehne.cn/run/m/mangleof_15_A.d http://dstress.kuehne.cn/run/m/mangleof_15_B.d http://dstress.kuehne.cn/run/m/mangleof_15_C.d http://dstress.kuehne.cn/run/m/mangleof_15_D.d Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFEH+AF3w+/yD4P9tIRAic1AKCSrOmy1GOb0Lsry6wfLQ2H7b/IFQCgvDT9 BPkzHqg8uz8ZkR+y3x+WD3g= =dpwQ -----END PGP SIGNATURE-----
Comment #3 by bugzilla — 2006-04-28T02:55:30Z
Fixed 0.155