Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug in optimization of zero right shift #17918

Open
dlangBugzillaToGithub opened this issue Aug 13, 2019 · 0 comments
Open

Bug in optimization of zero right shift #17918

dlangBugzillaToGithub opened this issue Aug 13, 2019 · 0 comments

Comments

@dlangBugzillaToGithub
Copy link

Yui Hosaka reported this on 2019-08-13T18:44:58Z

Transferred from https://issues.dlang.org/show_bug.cgi?id=20128

Description

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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant