(self, other: Self)
| 596 | } |
| 597 | |
| 598 | fn srem(self, other: Self) -> ValueResult<Self> { |
| 599 | let denominator = other.clone().into_int_signed()?; |
| 600 | |
| 601 | // Check if we are dividing INT_MIN / -1. This causes an integer overflow trap. |
| 602 | let min = DataValueExt::int(1i128 << (self.ty().bits() - 1), self.ty())?; |
| 603 | if self == min && denominator == -1 { |
| 604 | return Err(ValueError::IntegerOverflow); |
| 605 | } |
| 606 | |
| 607 | if denominator == 0 { |
| 608 | return Err(ValueError::IntegerDivisionByZero); |
| 609 | } |
| 610 | |
| 611 | binary_match!(%(&self, &other); [I8, I16, I32, I64, I128]) |
| 612 | } |
| 613 | |
| 614 | fn urem(self, other: Self) -> ValueResult<Self> { |
| 615 | let denominator = other.clone().into_int_unsigned()?; |
no test coverage detected