Bug 20128 – Bug in optimization of zero right shift

Status
NEW
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2019-08-13T18:44:58Z
Last change time
2024-12-13T19:04:58Z
Assigned to
No Owner
Creator
Yui Hosaka
Moved to GitHub: dmd#17918 →

Comments

Comment #0 by hos — 2019-08-13T18:44:58Z
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
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/17918 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB