The value returned by `__kmp_now_nsec()` can overflow 32-bit values causing incorrect values to be returned. The overflow can end up causing a divide by zero error because in `__kmp_initialize_system_tick()`, the value (`__kmp_now_nsec() - nsec`) can end up being much larger than the numerator:

`1e6 * (delay + (now - goal))`

during a pathological timing where the current time calculated is much larger than `nsec`. When this happens, the value of `__kmp_ticks_per_msec` is set to zero which is then used as the denominator in the `KMP_NOW_MSEC()` macro leading to the divide by zero error.

# Details

Details

# Diff Detail

Diff Detail

- Repository
- rOMP OpenMP