BUG: Fix INT_MIN % -1 to return 0 for all signed integer types (#29893) #29921
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Backport of #29893.
Summary of changes
Explicitly handle the case INT_MIN % -1 in scalar tail loops for fmod and remainder kernels.
Set the result to 0 to avoid undefined behavior and align with NumPy/Python expected semantics.
Ensures portable, correct behavior across all architectures, including POWER10 (ppc64le).
Background / Motivation
On POWER10 systems, several SIMD tests were failing due to integer overflow when evaluating INT_MIN % -1, an undefined operation in C.
Python defines this operation to return 0, and this change updates NumPy’s low-level implementation to match that behavior.
Issue Reference
Fixes: #29731 — [POWER10] SIMD tests failing with integer overflow (previously skipped)
cc: @seiko2plus @rgommers @ghatwala