[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