The following code produces weird results:
----
import std.stdio;
void main() {
auto a = new long[4];
foreach (i; 0 .. 4) {
a[i] = 1 << i;
}
writeln(a);
auto b = new long[4];
foreach (i; 0 .. 4) {
b[i] = (((1 >> i) & 1) ? -1 : +1) * a[i];
}
writeln(b);
}
----
(https://ideone.com/2NzVaA)
Its outputs are:
[1, 2, 4, 8]
[4294967295, 2, 4, 8]
while b[0] is supposed to be -1.
This happens only with -m64 and -O options.
Comment #1 by robert.schadek — 2024-12-13T19:04:58Z