January 21, 2019 [Issue 19599] New: Wrong codegen DMD x86_64 with both -O and -inline + double | ||||
---|---|---|---|---|
| ||||
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] -- |
Copyright © 1999-2021 by the D Language Foundation