[Issue 20128] New: Bug in optimization of zero right shift
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Tue Aug 13 18:44:58 UTC 2019
https://issues.dlang.org/show_bug.cgi?id=20128
Issue ID: 20128
Summary: Bug in optimization of zero right shift
Product: D
Version: D2
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: hos at hos.ac
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.
--
More information about the Digitalmars-d-bugs
mailing list