Bug 21584 – dmd -O causes incorrect output

Status
RESOLVED
Resolution
WORKSFORME
Severity
major
Priority
P1
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2021-01-26T05:51:25Z
Last change time
2022-04-13T12:26:43Z
Keywords
backend
Assigned to
No Owner
Creator
Saurabh Das

Comments

Comment #0 by saurabh.das — 2021-01-26T05:51:25Z
I'm seeing what appears to be a bug with the -O flag in dmd. Here is a reduced test case: struct SomeStruct { long value; } bool isNumberOne(int i) { SomeStruct l; if(i == 1) l = SomeStruct(10); return (l == SomeStruct(10)); } void main() { if (!isNumberOne(1)) assert(false); } See: https://run.dlang.io/is/zlrDvy rdmd test.d # Runs fine rdmd -O test.d # Assert trips The assert trips when run with "rdmd -O test.d" and it does not trip when run with "rdmd test.d". This bug is observed in all compiler versions from dmd-2.060 through to dmd-2.095. Forum discussion: https://forum.dlang.org/post/[email protected] Thanks, Saurabh
Comment #1 by dkorpel — 2022-04-13T12:26:43Z
While I could reproduce it with dmd-2.095, it works on dmd-2.097.1 and master.