From a53e1409293f7450fde2a85c5c35ab516ec39e81 Mon Sep 17 00:00:00 2001 From: Vincent Prouillet Date: Wed, 14 Jun 2023 14:35:29 +0200 Subject: [PATCH 1/4] Fix for Rust 1.70 --- src/mmap_bitvec.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mmap_bitvec.rs b/src/mmap_bitvec.rs index 4f4494d..e2569df 100644 --- a/src/mmap_bitvec.rs +++ b/src/mmap_bitvec.rs @@ -513,7 +513,7 @@ impl BitVector for MmapBitVec { // we have to transmute since we don't know if it's a u64 or u128 #[allow(clippy::transmute_ptr_to_ptr)] let lg_ptr: *const u128 = transmute(ptr.add(byte_idx_st)); - v |= (*lg_ptr).to_be() << (r.start & 7) >> (128 - new_size); + v |= lg_ptr.read_unaligned().to_be() << (r.start & 7) >> (128 - new_size); } } else { // special case if we can't get a whole u64 out without running outside the buffer @@ -526,7 +526,7 @@ impl BitVector for MmapBitVec { } // mask out the high bits in case we copied extra - v & (u128::max_value() >> (128 - new_size)) + v & (u128::MAX >> (128 - new_size)) } /// Set an unaligned range of bits using a `u64`. From adace7da55f86b89be9c787f2afc31349cafa2e3 Mon Sep 17 00:00:00 2001 From: Vincent Prouillet Date: Wed, 14 Jun 2023 14:38:38 +0200 Subject: [PATCH 2/4] Clippy suggestions --- src/mmap_bitvec.rs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/mmap_bitvec.rs b/src/mmap_bitvec.rs index e2569df..8513972 100644 --- a/src/mmap_bitvec.rs +++ b/src/mmap_bitvec.rs @@ -192,7 +192,7 @@ impl MmapBitVec { io::ErrorKind::InvalidData, format!( "file should be {} bytes (with {} header), but file is {} bytes", - byte_size + total_header_size as u64, + byte_size + total_header_size, total_header_size, file.metadata()?.len(), ), @@ -282,9 +282,9 @@ impl MmapBitVec { if r.end > self.size { panic!("Range ends outside of BitVec") } - let byte_idx_st = (r.start >> 3) as usize; - let byte_idx_en = ((r.end - 1) >> 3) as usize; - let new_size: usize = (((r.end - r.start) as usize - 1) >> 3) + 1; + let byte_idx_st = r.start >> 3; + let byte_idx_en = (r.end - 1) >> 3; + let new_size: usize = (((r.end - r.start) - 1) >> 3) + 1; let ptr: *const u8 = self.mmap.as_ptr(); let mut v = vec![0; new_size]; @@ -333,7 +333,7 @@ impl MmapBitVec { } else { 0 }; - let byte_idx_en = ((r.end - 1) >> 3) as usize; + let byte_idx_en = (r.end - 1) >> 3; let mmap: *mut u8 = self .mmap @@ -406,8 +406,8 @@ impl BitVector for MmapBitVec { /// Return the number of set bits in the range `r` fn rank(&self, r: Range) -> usize { - let byte_idx_st = (r.start >> 3) as usize; - let byte_idx_en = ((r.end - 1) >> 3) as usize; + let byte_idx_st = r.start >> 3; + let byte_idx_en = (r.end - 1) >> 3; let mmap: *const u8 = self.mmap.as_ptr(); let mut bit_count = 0usize; @@ -452,7 +452,7 @@ impl BitVector for MmapBitVec { /// Return the position of the `nth` set bit with `start` treated as the 0th position, or `None` if there is no set bit fn select(&self, n: usize, start: usize) -> Option { - let byte_idx_st = (start >> 3) as usize; + let byte_idx_st = start >> 3; let size_front = 8u8 - (start & 7) as u8; let mmap: *const u8 = self.mmap.as_ptr(); @@ -494,8 +494,8 @@ impl BitVector for MmapBitVec { } else if r.end > self.size { panic!("Range ends outside of BitVec") } - let byte_idx_st = (r.start >> 3) as usize; - let byte_idx_en = ((r.end - 1) >> 3) as usize; + let byte_idx_st = r.start >> 3; + let byte_idx_en = (r.end - 1) >> 3; let new_size: u8 = (r.end - r.start) as u8; let mut v; @@ -542,8 +542,8 @@ impl BitVector for MmapBitVec { if r.end > self.size { panic!("Range ends outside of BitVec") } - let byte_idx_st = (r.start >> 3) as usize; - let byte_idx_en = ((r.end - 1) >> 3) as usize; + let byte_idx_st = r.start >> 3; + let byte_idx_en = (r.end - 1) >> 3; let new_size: u8 = (r.end - r.start) as u8; // split off the front byte @@ -602,8 +602,8 @@ impl BitVector for MmapBitVec { if (r.end - 1) > self.size { panic!("Range ends outside of BitVec") } - let byte_idx_st = (r.start >> 3) as usize; - let byte_idx_en = ((r.end - 1) >> 3) as usize; + let byte_idx_st = r.start >> 3; + let byte_idx_en = (r.end - 1) >> 3; let mmap: *mut u8 = self .mmap From 0a66ad655881f8029fe61db0a8f1d561c31f03c5 Mon Sep 17 00:00:00 2001 From: boydgreenfield Date: Thu, 5 Oct 2023 15:39:03 -0400 Subject: [PATCH 3/4] Add regression test for #20 (rust-lang/rust#98112) --- src/mmap_bitvec.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mmap_bitvec.rs b/src/mmap_bitvec.rs index 8513972..bb23490 100644 --- a/src/mmap_bitvec.rs +++ b/src/mmap_bitvec.rs @@ -701,7 +701,7 @@ mod test { #[test] fn test_bitvec_get_range() { - let mut b = MmapBitVec::from_memory(128).unwrap(); + let mut b = MmapBitVec::from_memory(1024).unwrap(); b.set(2, true); b.set(3, true); b.set(5, true); From 54004558a467ea01ba5f0980f084b6b6c471e923 Mon Sep 17 00:00:00 2001 From: boydgreenfield Date: Thu, 5 Oct 2023 15:44:32 -0400 Subject: [PATCH 4/4] Update pinned rustc version in GHA to 1.69 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9ba46ea..6a5f8af 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,7 @@ jobs: include: - build: pinned os: ubuntu-22.04 - rust: 1.60.0 + rust: 1.69.0 - build: stable os: ubuntu-22.04 rust: stable