Skip to content

Commit b8a216b

Browse files
authored
Merge pull request #343 from cuviper/mac_digit-dead-bug
Remove an unreachable endianness bug in `mac_digit`
2 parents 575cea4 + 04699fa commit b8a216b

5 files changed

Lines changed: 19 additions & 12 deletions

File tree

ci/big_quickcheck/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ name = "big_quickcheck"
33
version = "0.1.0"
44
authors = ["Josh Stone <cuviper@gmail.com>"]
55
edition = "2018"
6+
rust-version = "1.60"
67

78
[dependencies]
89
num-integer = "0.1.42"

ci/big_rand/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ name = "big_rand"
33
version = "0.1.0"
44
authors = ["Josh Stone <cuviper@gmail.com>"]
55
edition = "2018"
6+
rust-version = "1.60"
67

78
[dependencies]
89
num-traits = "0.2.11"

ci/big_serde/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ name = "big_serde"
33
version = "0.1.0"
44
authors = ["Josh Stone <cuviper@gmail.com>"]
55
edition = "2018"
6+
rust-version = "1.60"
67

78
[dependencies]
89
num-traits = "0.2.11"

ci/test_full.sh

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ check_version() {
2121
]]
2222
}
2323

24+
export CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS=fallback
25+
generate_lockfile() {
26+
cargo generate-lockfile
27+
if ! check_version 1.85 ; then
28+
cargo +stable update
29+
fi
30+
}
31+
2432
echo "Testing $CRATE on rustc $RUST_VERSION"
2533
if ! check_version $MSRV ; then
2634
echo "The minimum for $CRATE is rustc $MSRV"
@@ -34,10 +42,10 @@ if [ -n "${NO_STD_FEATURES[*]}" ]; then
3442
echo " no_std supported features: ${NO_STD_FEATURES[*]}"
3543
fi
3644

37-
# arbitrary 1.1.4 started using array::from_fn
38-
check_version 1.63.0 || cargo update -p arbitrary --precise 1.1.3
45+
generate_lockfile
3946

40-
check_version 1.63.0 || cargo update -p libc --precise 0.2.163
47+
# arbitrary 1.1.4 started using array::from_fn, but didn't set rust-version
48+
check_version 1.63.0 || cargo update -p arbitrary --precise 1.1.3
4149

4250
set -x
4351

@@ -81,18 +89,17 @@ fi
8189
case "${STD_FEATURES[*]}" in
8290
*serde*) (
8391
cd ci/big_serde
92+
generate_lockfile
8493
cargo test
8594
) ;;&
8695
*rand*) (
8796
cd ci/big_rand
88-
check_version 1.63.0 || cargo update -p libc --precise 0.2.163
89-
check_version 1.61.0 || cargo update -p ppv-lite86 --precise 0.2.17
97+
generate_lockfile
9098
cargo test
9199
) ;;&
92100
*quickcheck*) (
93101
cd ci/big_quickcheck
94-
check_version 1.63.0 || cargo update -p libc --precise 0.2.163
95-
check_version 1.61.0 || cargo update -p syn --precise 2.0.67
102+
generate_lockfile
96103
cargo test
97104
) ;;&
98105
esac

src/biguint/multiplication.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,9 @@ fn mac_digit(acc: &mut [BigDigit], b: &[BigDigit], c: BigDigit) {
4848
}
4949

5050
let (carry_hi, carry_lo) = big_digit::from_doublebigdigit(carry);
51+
debug_assert_eq!(carry_hi, 0, "mac_with_carry never keeps high bits");
5152

52-
let final_carry = if carry_hi == 0 {
53-
__add2(a_hi, &[carry_lo])
54-
} else {
55-
__add2(a_hi, &[carry_hi, carry_lo])
56-
};
53+
let final_carry = __add2(a_hi, &[carry_lo]);
5754
assert_eq!(final_carry, 0, "carry overflow during multiplication!");
5855
}
5956

0 commit comments

Comments
 (0)