replace &
with &&
in {integer}::checked_div
Using short-circuit operators makes it easier to perform some kinds of source code analysis, like MC/DC code coverage (a requirement in safety-critical environments). The optimized x86 assembly is the same between the old and new versions: ``` xor eax, eax test esi, esi je .LBB0_1 cmp edi, -2147483648 jne .LBB0_4 cmp esi, -1 jne .LBB0_4 ret .LBB0_1: ret .LBB0_4: mov eax, edi cdq idiv esi mov edx, eax mov eax, 1 ret ```
This commit is contained in:
parent
a5a8bb0125
commit
81130fe188
@ -608,8 +608,7 @@ pub const fn checked_mul(self, rhs: Self) -> Option<Self> {
|
||||
without modifying the original"]
|
||||
#[inline]
|
||||
pub const fn checked_div(self, rhs: Self) -> Option<Self> {
|
||||
// Using `&` helps LLVM see that it is the same check made in division.
|
||||
if unlikely!(rhs == 0 || ((self == Self::MIN) & (rhs == -1))) {
|
||||
if unlikely!(rhs == 0 || ((self == Self::MIN) && (rhs == -1))) {
|
||||
None
|
||||
} else {
|
||||
// SAFETY: div by zero and by INT_MIN have been checked above
|
||||
|
Loading…
Reference in New Issue
Block a user