Convert from double to uint64_t in two steps.

We want wraparound behavior here but we don't want to trigger sanitizer
warnings.  Converting to int64_t and then wraping around by cast to
uint64_t avoids the UB issue that triggers the sanitizer warning.

Change-Id: I9400b988dce7899e9ba42cab3e35c7ffedec8fe1
Этот коммит содержится в:
Sean Keely
2020-08-25 20:12:52 -05:00
родитель 24bad55dc7
Коммит 5f43778a51
+1 -1
Просмотреть файл
@@ -1188,7 +1188,7 @@ uint64_t GpuAgent::TranslateTime(uint64_t tick) {
uint64_t system_tick = 0;
double ratio = double(t1_.SystemClockCounter - t0_.SystemClockCounter) /
double(t1_.GPUClockCounter - t0_.GPUClockCounter);
system_tick = uint64_t(ratio * double(int64_t(tick - t1_.GPUClockCounter))) + t1_.SystemClockCounter;
system_tick = uint64_t(int64_t(ratio * double(int64_t(tick - t1_.GPUClockCounter)))) + t1_.SystemClockCounter;
// tick predates HSA startup - extrapolate with fixed clock ratio
if (tick < t0_.GPUClockCounter) {