August 13, 2019 [Issue 20128] New: Bug in optimization of zero right shift | ||||
---|---|---|---|---|
| ||||
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@puremagic.com Reporter: hos@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. -- |
Copyright © 1999-2021 by the D Language Foundation