digitalmars.D.bugs - [Issue 19599] New: Wrong codegen DMD x86_64 with both -O and -inline
- d-bugmail puremagic.com (45/45) Jan 20 2019 https://issues.dlang.org/show_bug.cgi?id=19599
https://issues.dlang.org/show_bug.cgi?id=19599 Issue ID: 19599 Summary: Wrong codegen DMD x86_64 with both -O and -inline + double Product: D Version: D2 Hardware: x86 OS: Windows Status: NEW Severity: major Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: aliloko gmail.com DMD v2.081.2 Build this with: dmd repro.d -m64 -inline -O --------- repro.d ----------- struct double2 { double[2] array; this(double[2] v) pure nothrow safe nogc { array[] = v[]; } ref inout(double) opIndex(size_t i) inout pure nothrow safe nogc { return array[i]; } } double2 _mm_sub_sd(double2 a, double2 b) pure safe { a[0] -= b[0]; return a; } void main() { double2 a = [1.0, -2.0]; a = _mm_sub_sd(a, a); assert(a.array == [0.0, -2.0]); } ``` The assert doesn't pass. Instead a is equal to [1.0, -2.0]. It should be exactly [0.0, -2.0] --
Jan 20 2019