Fix integer modulo by zero crash in CPU EP Mod operator (#27833)
### Description
Add a pre-check for zero values in the divisor tensor for integral types
in `Mod`. Returns an error `Status` instead of hitting undefined
behavior (SIGFPE / structured exception).
- **`element_wise_ops.cc`**: Added `CheckZeroDivisorImpl` as a single
template struct in the `mod_internal` namespace using `if constexpr
(std::is_integral<T>::value)` to guard the check — no-op for non-integer
types. The struct's `operator()` returns `Status` (via `ORT_RETURN_IF`)
and is dispatched with `InvokeRet<Status>`. When the divisor is a
constant initializer, `TryGetConstantInput` validates for zeros once at
kernel creation time in the out-of-line constructor (using
`ORT_THROW_IF_ERROR`), avoiding per-`Compute` overhead. A
`divisor_is_validated_constant_` flag tracks whether the one-time check
was performed. In `Compute`, non-constant divisors are scanned via the
type dispatcher (using `ORT_RETURN_IF_ERROR`) before calling
`CallModImpl`, skipping the check when the constant was already
validated. The Mod constructor is defined out-of-line after the
`mod_internal` namespace to keep it contiguous.
- **`element_wise_ops_test.cc`**: Added `Mod_int8_by_zero`,
`Mod_int32_by_zero`, `Mod_int64_by_zero_scalar` tests covering tensor
and scalar divisor cases, plus `Mod_int32_by_zero_constant_initializer`
to exercise the `TryGetConstantInput` constructor path with
`is_initializer = true`.
### Motivation and Context
Integer modulo by zero is UB in C++ and causes a hardware exception that
crashes the process. Float types produce NaN naturally via `std::fmod`,
but int8/int16/int32/int64/uint* types do not. This is the same class of
issue that was fixed for the `Div` operator in #27693, now applied to
the `Mod` operator.
<!-- START COPILOT CODING AGENT TIPS -->
---
💬 Send tasks to Copilot coding agent from
[Slack](https://gh.io/cca-slack-docs) and
[Teams](https://gh.io/cca-teams-docs) to turn conversations into code.
Copilot posts an update in your thread when it's finished.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: edgchen1 <18449977+edgchen1@users.noreply.github.com>