From 5913ef6660aa7977d7cbee01b115d8a5e926b893 Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Wed, 27 Oct 2021 13:00:42 +0200 Subject: [PATCH] replace `|` with `||` in {unsigned_int}::carrying_add Using short-circuiting 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_64 assembly is the same between the old and new versions: ``` mov eax, edi add dl, -1 adc eax, esi setb dl ret ``` --- library/core/src/num/uint_macros.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/core/src/num/uint_macros.rs b/library/core/src/num/uint_macros.rs index 507ff516a8f2..18c1353e7c62 100644 --- a/library/core/src/num/uint_macros.rs +++ b/library/core/src/num/uint_macros.rs @@ -1525,7 +1525,7 @@ macro_rules! uint_impl { // to generate optimal code for now, and LLVM doesn't have an equivalent intrinsic let (a, b) = self.overflowing_add(rhs); let (c, d) = a.overflowing_add(carry as $SelfT); - (c, b | d) + (c, b || d) } /// Calculates `self` + `rhs` with a signed `rhs`