interval = RtsFlags.MiscFlags.tickInterval;
if (interval == 0) { interval = 50; }
gettimeofday(&tv, (struct timezone *) NULL);
- // cast to lnat because nat may be 64 bit when int is only 32 bit
- return ((lnat)tv.tv_sec * 1000 / interval +
- (lnat)tv.tv_usec / (interval * 1000));
+
+ // Avoid overflow when we multiply seconds by 1000. See #2848
+ return (lnat)((StgWord64)tv.tv_sec * 1000 / interval +
+ (StgWord64)tv.tv_usec / (interval * 1000));
}