diff options
| author | Martin Storsjö <martin@martin.st> | 2020-12-17 15:40:06 +0200 |
|---|---|---|
| committer | Martin Storsjö <martin@martin.st> | 2021-01-12 23:56:03 +0200 |
| commit | 02f1d28ed6b8f33445dae3beed8b6cc8dada4312 (patch) | |
| tree | cf40a2c70da33959e627f6e252b7f04fbc658652 /llvm/lib/Transforms/Utils/LoopUtils.cpp | |
| parent | d1fa7afc7aefd822698fe86431d8184b1e8b6683 (diff) | |
| download | llvm-02f1d28ed6b8f33445dae3beed8b6cc8dada4312.zip llvm-02f1d28ed6b8f33445dae3beed8b6cc8dada4312.tar.gz llvm-02f1d28ed6b8f33445dae3beed8b6cc8dada4312.tar.bz2 | |
[libcxx] Avoid overflows in the windows __libcpp_steady_clock_now()
As freq.QuadValue can be in the range of 10000000 to 19200000,
the multiplication before division makes the calculation overflow
and wrap to negative values every 16-30 minutes.
Instead count the whole seconds separately before adding the
scaled fractional seconds.
Add a testcase for steady_clock to check that the values returned for
now() compare as bigger than the zero time origin; this
corresponds to a testcase in Qt [1] [2] (that failed spuriously
due to this).
[1] https://bugreports.qt.io/browse/QTBUG-89539
[2] https://code.qt.io/cgit/qt/qtbase.git/tree/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp?id=f8de5e54022b8b7471131b7ad55c83b69b2684c0#n569
Differential Revision: https://reviews.llvm.org/D93456
Diffstat (limited to 'llvm/lib/Transforms/Utils/LoopUtils.cpp')
0 files changed, 0 insertions, 0 deletions
