digitalmars.D.bugs - [Issue 13784] New: Wrong code with modulo operation and
- via Digitalmars-d-bugs (34/34) Nov 27 2014 https://issues.dlang.org/show_bug.cgi?id=13784
https://issues.dlang.org/show_bug.cgi?id=13784 Issue ID: 13784 Summary: Wrong code with modulo operation and optimisations enabled Product: D Version: D1 & D2 Hardware: x86_64 OS: Linux Status: NEW Severity: normal Priority: P1 Component: DMD Assignee: nobody puremagic.com Reporter: public dicebot.lv assertions passes when compiled with no flags and fails when compiled with -O ``` long modulo24 (long ticks) { const TicksPerDay = 864000000000; ticks %= TicksPerDay; if (ticks < 0) ticks += TicksPerDay; return ticks; } unittest { assert (modulo24(-141600000000) == 722400000000); } ``` Checking assembly reveals wrong optimisation via replacing modulo with multiplication. Issue present in both D1 and D2 compilers. Workaround is to avoid modulo operation with negative numbers. --
Nov 27 2014