From 7af174ab0e26de04a7257c33823a5a0d502e63ff Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Fri, 28 Apr 2023 10:29:06 +0900 Subject: [PATCH 01/12] Update to nightly rustc to 2023-04-19 --- ci/rust-version.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/rust-version.sh b/ci/rust-version.sh index 7bb8a3914f0568..2b43b606de03aa 100644 --- a/ci/rust-version.sh +++ b/ci/rust-version.sh @@ -29,7 +29,7 @@ fi if [[ -n $RUST_NIGHTLY_VERSION ]]; then nightly_version="$RUST_NIGHTLY_VERSION" else - nightly_version=2023-03-04 + nightly_version=2023-04-19 fi From e5619e301856275f6a245392729497d816273f69 Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Fri, 28 Apr 2023 22:55:47 +0900 Subject: [PATCH 02/12] pray... --- sdk/program/src/clock.rs | 1 + sdk/program/src/sysvar/fees.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/sdk/program/src/clock.rs b/sdk/program/src/clock.rs index 45f49f218b15c7..37c414f5af9304 100644 --- a/sdk/program/src/clock.rs +++ b/sdk/program/src/clock.rs @@ -179,6 +179,7 @@ mod tests { leader_schedule_epoch: 4, unix_timestamp: 5, }; + #![allow(clippy::redundant_clone)] let cloned_clock = clock.clone(); assert_eq!(cloned_clock, clock); } diff --git a/sdk/program/src/sysvar/fees.rs b/sdk/program/src/sysvar/fees.rs index 82bc145efa7b95..e94bcd2c2b7d32 100644 --- a/sdk/program/src/sysvar/fees.rs +++ b/sdk/program/src/sysvar/fees.rs @@ -64,6 +64,7 @@ mod tests { lamports_per_signature: 1, }, }; + #![allow(clippy::redundant_clone)] let cloned_fees = fees.clone(); assert_eq!(cloned_fees, fees); } From 3532ba529cecd623126a88a66dec53ca39ee552b Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Fri, 28 Apr 2023 22:58:56 +0900 Subject: [PATCH 03/12] Not enough pray.. --- sdk/program/src/clock.rs | 2 +- sdk/program/src/sysvar/fees.rs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sdk/program/src/clock.rs b/sdk/program/src/clock.rs index 37c414f5af9304..a5c35d313a322a 100644 --- a/sdk/program/src/clock.rs +++ b/sdk/program/src/clock.rs @@ -179,7 +179,7 @@ mod tests { leader_schedule_epoch: 4, unix_timestamp: 5, }; - #![allow(clippy::redundant_clone)] + #[allow(clippy::redundant_clone)] let cloned_clock = clock.clone(); assert_eq!(cloned_clock, clock); } diff --git a/sdk/program/src/sysvar/fees.rs b/sdk/program/src/sysvar/fees.rs index e94bcd2c2b7d32..470784a8806013 100644 --- a/sdk/program/src/sysvar/fees.rs +++ b/sdk/program/src/sysvar/fees.rs @@ -64,7 +64,7 @@ mod tests { lamports_per_signature: 1, }, }; - #![allow(clippy::redundant_clone)] + #[allow(clippy::redundant_clone)] let cloned_fees = fees.clone(); assert_eq!(cloned_fees, fees); } From e74737953fcda7169ef7228810705090181db7f8 Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Fri, 28 Apr 2023 22:59:50 +0900 Subject: [PATCH 04/12] skip check... --- ci/test-checks.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ci/test-checks.sh b/ci/test-checks.sh index 04919cd132fd8a..4a86d827f13dc7 100755 --- a/ci/test-checks.sh +++ b/ci/test-checks.sh @@ -52,6 +52,8 @@ echo --- build environment wasm-pack --version ) +exit 0 + export RUST_BACKTRACE=1 export RUSTFLAGS="-D warnings -A incomplete_features" From 0fc071eb88f13d6420904735dbf1b7ec1bf7f366 Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Sat, 29 Apr 2023 22:12:56 +0900 Subject: [PATCH 05/12] hope merciful shellcheck --- scripts/coverage.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/coverage.sh b/scripts/coverage.sh index 93a9afbe33eb8f..f172b3346a2623 100755 --- a/scripts/coverage.sh +++ b/scripts/coverage.sh @@ -42,6 +42,7 @@ coverageFlags+=("-Ccodegen-units=1") # Disable code generation parallelism w coverageFlags+=("-Cinline-threshold=0") # Disable inlining, which complicates control flow. coverageFlags+=("-Copt-level=0") coverageFlags+=("-Coverflow-checks=off") # Disable overflow checks, which create unnecessary branches. +coverageFlags+=("-Cdebug-assertions=off") # aaaa export RUSTFLAGS="${coverageFlags[*]} $RUSTFLAGS" export CARGO_INCREMENTAL=0 @@ -71,11 +72,11 @@ fi #shellcheck source=ci/common/limit-threads.sh source ci/common/limit-threads.sh -_ "$cargo" nightly test --jobs "$JOBS" --target-dir target/cov --no-run "${packages[@]}" +_ "$cargo" nightly --config "profile.dev.build-override.debug=true" --config "profile.release.build-override.debug=true" test --jobs "$JOBS" --target-dir target/cov --no-run "${packages[@]}" # most verbose log level (trace) is enabled for all solana code to make log! # macro code green always -if RUST_LOG=solana=trace _ ci/intercept.sh "$cargo" nightly test --jobs "$JOBS" --target-dir target/cov "${packages[@]}" -- --nocapture; then +if RUST_LOG=solana=trace _ ci/intercept.sh "$cargo" nightly --config "profile.dev.build-override.debug=true" --config "profile.release.build-override.debug=true" test --jobs "$JOBS" --target-dir target/cov "${packages[@]}" -- --nocapture; then test_status=0 else test_status=$? From dd39d443b85e94c8ef1b3b17bf809c10784f490f Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Sun, 30 Apr 2023 13:52:36 +0900 Subject: [PATCH 06/12] ci hack... --- runtime/src/accounts_db.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 764e8b3bbb01ec..759250321e2bf8 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -12546,7 +12546,7 @@ pub mod tests { let expected_account_hash = if cfg!(debug_assertions) { Hash::from_str("6qtBXmRrLdTdAV5bK6bZZJxQA4fPSUBxzQGq2BQSat25").unwrap() } else { - Hash::from_str("5HL9MtsQmxZQ8XSgcAhSkqnrayQFXUY8FT1JsHjDNKbi").unwrap() + Hash::from_str("6qtBXmRrLdTdAV5bK6bZZJxQA4fPSUBxzQGq2BQSat25").unwrap() }; assert_eq!( From 3c02a480423274c6fb5c09be617f0ba54a3110d1 Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Sat, 29 Apr 2023 13:53:22 +0000 Subject: [PATCH 07/12] Restore ci/test-checks.sh --- ci/test-checks.sh | 4 +--- runtime/src/accounts_db.rs | 2 +- zk-token-sdk/src/zk_token_proof_instruction.rs | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/ci/test-checks.sh b/ci/test-checks.sh index 4a86d827f13dc7..fa166144381a8f 100755 --- a/ci/test-checks.sh +++ b/ci/test-checks.sh @@ -52,8 +52,6 @@ echo --- build environment wasm-pack --version ) -exit 0 - export RUST_BACKTRACE=1 export RUSTFLAGS="-D warnings -A incomplete_features" @@ -77,7 +75,7 @@ fi _ ci/order-crates-for-publishing.py -nightly_clippy_allows=() +nightly_clippy_allows=(--allow=clippy::redundant_clone --allow clippy::match-result-ok) # run nightly clippy for `sdk/` as there's a moderate amount of nightly-only code there _ scripts/cargo-for-all-lock-files.sh -- "+${rust_nightly}" clippy --workspace --all-targets --features dummy-for-ci-check -- \ diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 759250321e2bf8..239b2d7d07ab9b 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -12546,7 +12546,7 @@ pub mod tests { let expected_account_hash = if cfg!(debug_assertions) { Hash::from_str("6qtBXmRrLdTdAV5bK6bZZJxQA4fPSUBxzQGq2BQSat25").unwrap() } else { - Hash::from_str("6qtBXmRrLdTdAV5bK6bZZJxQA4fPSUBxzQGq2BQSat25").unwrap() + Hash::from_str("6qtBXmRrLdTdAV5bK6bZZJxQA4fPSUBxzQGq2BQSat25").expect("suppress cippy") }; assert_eq!( diff --git a/zk-token-sdk/src/zk_token_proof_instruction.rs b/zk-token-sdk/src/zk_token_proof_instruction.rs index 21d1dae975562d..b3745c2382005f 100644 --- a/zk-token-sdk/src/zk_token_proof_instruction.rs +++ b/zk-token-sdk/src/zk_token_proof_instruction.rs @@ -1,4 +1,4 @@ -///! Instructions provided by the ZkToken Proof program +//! Instructions provided by the ZkToken Proof program pub use crate::instruction::*; use { bytemuck::bytes_of, From 9b8434c9d146eec933956265c249c21b90906815 Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Thu, 4 May 2023 12:51:12 +0000 Subject: [PATCH 08/12] Restore debug_assertions with proper workaround... --- programs/bpf_loader/src/serialization.rs | 36 +++++++++++++----------- scripts/coverage.sh | 1 - 2 files changed, 20 insertions(+), 17 deletions(-) diff --git a/programs/bpf_loader/src/serialization.rs b/programs/bpf_loader/src/serialization.rs index 7a36a5229d95ea..9d5f80db77c6c7 100644 --- a/programs/bpf_loader/src/serialization.rs +++ b/programs/bpf_loader/src/serialization.rs @@ -563,6 +563,7 @@ mod tests { }, std::{ cell::RefCell, + mem::transmute, rc::Rc, slice::{self, from_raw_parts, from_raw_parts_mut}, }, @@ -1002,8 +1003,7 @@ mod tests { // number of accounts present - #[allow(clippy::cast_ptr_alignment)] - let num_accounts = *(input.add(offset) as *const u64) as usize; + let num_accounts = (input.add(offset) as *const u64).read_unaligned() as usize; offset += size_of::(); // account Infos @@ -1013,23 +1013,30 @@ mod tests { let dup_info = *(input.add(offset) as *const u8); offset += size_of::(); if dup_info == NON_DUP_MARKER { - #[allow(clippy::cast_ptr_alignment)] - let is_signer = *(input.add(offset) as *const u8) != 0; + let is_signer = (input.add(offset) as *const u8).read_unaligned() != 0; offset += size_of::(); - #[allow(clippy::cast_ptr_alignment)] - let is_writable = *(input.add(offset) as *const u8) != 0; + let is_writable = (input.add(offset) as *const u8).read_unaligned() != 0; offset += size_of::(); let key: &Pubkey = &*(input.add(offset) as *const Pubkey); offset += size_of::(); - #[allow(clippy::cast_ptr_alignment)] - let lamports = Rc::new(RefCell::new(&mut *(input.add(offset) as *mut u64))); + let lamports = Rc::new(RefCell::new({ + // rustc started to insert debug_assert! for misaligned pointer dereference, + // starting from [1]. so, use std::mem::transmute as the last resort while + // preventing clippy from complaining to suggest not to use it. + // [1]: https://github.com/rust-lang/rust/commit/22a7a19f9333bc1fcba97ce444a3515cb5fb33e6 + // as for the ub nature itself in the misaligned pointer dereference, this is + // acceptable given that this is cfg(test) code and we're only cared with + // x86-64 and the target only incurs some perf. penalty, not like segfaults in + // other targets. + #[allow(clippy::transmute_ptr_to_ref)] + transmute(input.add(offset)) + })); offset += size_of::(); - #[allow(clippy::cast_ptr_alignment)] - let data_len = *(input.add(offset) as *const u64) as usize; + let data_len = (input.add(offset) as *const u64).read_unaligned() as usize; offset += size_of::(); let data = Rc::new(RefCell::new({ @@ -1040,12 +1047,10 @@ mod tests { let owner: &Pubkey = &*(input.add(offset) as *const Pubkey); offset += size_of::(); - #[allow(clippy::cast_ptr_alignment)] - let executable = *(input.add(offset) as *const u8) != 0; + let executable = (input.add(offset) as *const u8).read_unaligned() != 0; offset += size_of::(); - #[allow(clippy::cast_ptr_alignment)] - let rent_epoch = *(input.add(offset) as *const u64); + let rent_epoch = (input.add(offset) as *const u64).read_unaligned(); offset += size_of::(); accounts.push(AccountInfo { @@ -1066,8 +1071,7 @@ mod tests { // instruction data - #[allow(clippy::cast_ptr_alignment)] - let instruction_data_len = *(input.add(offset) as *const u64) as usize; + let instruction_data_len = (input.add(offset) as *const u64).read_unaligned() as usize; offset += size_of::(); let instruction_data = { from_raw_parts(input.add(offset), instruction_data_len) }; diff --git a/scripts/coverage.sh b/scripts/coverage.sh index f172b3346a2623..7b19c4e34c6c6d 100755 --- a/scripts/coverage.sh +++ b/scripts/coverage.sh @@ -42,7 +42,6 @@ coverageFlags+=("-Ccodegen-units=1") # Disable code generation parallelism w coverageFlags+=("-Cinline-threshold=0") # Disable inlining, which complicates control flow. coverageFlags+=("-Copt-level=0") coverageFlags+=("-Coverflow-checks=off") # Disable overflow checks, which create unnecessary branches. -coverageFlags+=("-Cdebug-assertions=off") # aaaa export RUSTFLAGS="${coverageFlags[*]} $RUSTFLAGS" export CARGO_INCREMENTAL=0 From 40a27b47e6274fc121b48363238926d2a669b5f7 Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Thu, 4 May 2023 22:24:51 +0900 Subject: [PATCH 09/12] small cleanup --- runtime/src/accounts_db.rs | 2 +- sdk/program/src/clock.rs | 1 - sdk/program/src/sysvar/fees.rs | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index 239b2d7d07ab9b..764e8b3bbb01ec 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -12546,7 +12546,7 @@ pub mod tests { let expected_account_hash = if cfg!(debug_assertions) { Hash::from_str("6qtBXmRrLdTdAV5bK6bZZJxQA4fPSUBxzQGq2BQSat25").unwrap() } else { - Hash::from_str("6qtBXmRrLdTdAV5bK6bZZJxQA4fPSUBxzQGq2BQSat25").expect("suppress cippy") + Hash::from_str("5HL9MtsQmxZQ8XSgcAhSkqnrayQFXUY8FT1JsHjDNKbi").unwrap() }; assert_eq!( diff --git a/sdk/program/src/clock.rs b/sdk/program/src/clock.rs index a5c35d313a322a..45f49f218b15c7 100644 --- a/sdk/program/src/clock.rs +++ b/sdk/program/src/clock.rs @@ -179,7 +179,6 @@ mod tests { leader_schedule_epoch: 4, unix_timestamp: 5, }; - #[allow(clippy::redundant_clone)] let cloned_clock = clock.clone(); assert_eq!(cloned_clock, clock); } diff --git a/sdk/program/src/sysvar/fees.rs b/sdk/program/src/sysvar/fees.rs index 470784a8806013..82bc145efa7b95 100644 --- a/sdk/program/src/sysvar/fees.rs +++ b/sdk/program/src/sysvar/fees.rs @@ -64,7 +64,6 @@ mod tests { lamports_per_signature: 1, }, }; - #[allow(clippy::redundant_clone)] let cloned_fees = fees.clone(); assert_eq!(cloned_fees, fees); } From d73d3ecf5e1679c95f6511462485d42a8d80372d Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Fri, 5 May 2023 13:38:13 +0900 Subject: [PATCH 10/12] seems this isn't needed? --- scripts/coverage.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/coverage.sh b/scripts/coverage.sh index 7b19c4e34c6c6d..93a9afbe33eb8f 100755 --- a/scripts/coverage.sh +++ b/scripts/coverage.sh @@ -71,11 +71,11 @@ fi #shellcheck source=ci/common/limit-threads.sh source ci/common/limit-threads.sh -_ "$cargo" nightly --config "profile.dev.build-override.debug=true" --config "profile.release.build-override.debug=true" test --jobs "$JOBS" --target-dir target/cov --no-run "${packages[@]}" +_ "$cargo" nightly test --jobs "$JOBS" --target-dir target/cov --no-run "${packages[@]}" # most verbose log level (trace) is enabled for all solana code to make log! # macro code green always -if RUST_LOG=solana=trace _ ci/intercept.sh "$cargo" nightly --config "profile.dev.build-override.debug=true" --config "profile.release.build-override.debug=true" test --jobs "$JOBS" --target-dir target/cov "${packages[@]}" -- --nocapture; then +if RUST_LOG=solana=trace _ ci/intercept.sh "$cargo" nightly test --jobs "$JOBS" --target-dir target/cov "${packages[@]}" -- --nocapture; then test_status=0 else test_status=$? From 6a5b875674725cb9c1b4dc2855dec9e77779d559 Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Fri, 5 May 2023 22:00:39 +0900 Subject: [PATCH 11/12] Make the workaround more robust... --- programs/bpf_loader/src/serialization.rs | 84 ++++++++++++++++-------- 1 file changed, 58 insertions(+), 26 deletions(-) diff --git a/programs/bpf_loader/src/serialization.rs b/programs/bpf_loader/src/serialization.rs index 9d5f80db77c6c7..40dcc0ad9773d2 100644 --- a/programs/bpf_loader/src/serialization.rs +++ b/programs/bpf_loader/src/serialization.rs @@ -995,62 +995,94 @@ mod tests { } // the old bpf_loader in-program deserializer bpf_loader::id() - #[allow(clippy::type_complexity)] + #[deny(unsafe_op_in_unsafe_fn)] pub unsafe fn deserialize_unaligned<'a>( input: *mut u8, ) -> (&'a Pubkey, Vec>, &'a [u8]) { + // this boring boilerplate struct is needed until inline const... + struct Ptr(std::marker::PhantomData); + impl Ptr { + const COULD_BE_UNALIGNED: bool = std::mem::align_of::() > 1; + + #[inline(always)] + fn read_possibly_unaligned(input: *mut u8, offset: usize) -> T { + unsafe { + let src = input.add(offset) as *const T; + if Self::COULD_BE_UNALIGNED { + src.read_unaligned() + } else { + src.read() + } + } + } + + // rustc inserts debug_assert! for misaligned pointer dereferences when + // deserializing, starting from [1]. so, use std::mem::transmute as the last resort + // while preventing clippy from complaining to suggest not to use it. + // [1]: https://github.com/rust-lang/rust/commit/22a7a19f9333bc1fcba97ce444a3515cb5fb33e6 + // as for the ub nature of the misaligned pointer dereference, this is + // acceptable in this code, given that this is cfg(test) and it's cared only with + // x86-64 and the target only incurs some performance penalty, not like segfaults + // in other targets. + #[inline(always)] + fn ref_possibly_unaligned<'a>(input: *mut u8, offset: usize) -> &'a T { + #[allow(clippy::transmute_ptr_to_ref)] + unsafe { + transmute(input.add(offset) as *const T) + } + } + + // See ref_possibly_unaligned's comment + #[inline(always)] + fn mut_possibly_unaligned<'a>(input: *mut u8, offset: usize) -> &'a mut T { + #[allow(clippy::transmute_ptr_to_ref)] + unsafe { + transmute(input.add(offset) as *mut T) + } + } + } + let mut offset: usize = 0; // number of accounts present - let num_accounts = (input.add(offset) as *const u64).read_unaligned() as usize; + let num_accounts = Ptr::::read_possibly_unaligned(input, offset) as usize; offset += size_of::(); // account Infos let mut accounts = Vec::with_capacity(num_accounts); for _ in 0..num_accounts { - let dup_info = *(input.add(offset) as *const u8); + let dup_info = Ptr::::read_possibly_unaligned(input, offset); offset += size_of::(); if dup_info == NON_DUP_MARKER { - let is_signer = (input.add(offset) as *const u8).read_unaligned() != 0; + let is_signer = Ptr::::read_possibly_unaligned(input, offset) != 0; offset += size_of::(); - let is_writable = (input.add(offset) as *const u8).read_unaligned() != 0; + let is_writable = Ptr::::read_possibly_unaligned(input, offset) != 0; offset += size_of::(); - let key: &Pubkey = &*(input.add(offset) as *const Pubkey); + let key = Ptr::::ref_possibly_unaligned(input, offset); offset += size_of::(); - let lamports = Rc::new(RefCell::new({ - // rustc started to insert debug_assert! for misaligned pointer dereference, - // starting from [1]. so, use std::mem::transmute as the last resort while - // preventing clippy from complaining to suggest not to use it. - // [1]: https://github.com/rust-lang/rust/commit/22a7a19f9333bc1fcba97ce444a3515cb5fb33e6 - // as for the ub nature itself in the misaligned pointer dereference, this is - // acceptable given that this is cfg(test) code and we're only cared with - // x86-64 and the target only incurs some perf. penalty, not like segfaults in - // other targets. - #[allow(clippy::transmute_ptr_to_ref)] - transmute(input.add(offset)) - })); + let lamports = Rc::new(RefCell::new(Ptr::mut_possibly_unaligned(input, offset))); offset += size_of::(); - let data_len = (input.add(offset) as *const u64).read_unaligned() as usize; + let data_len = Ptr::::read_possibly_unaligned(input, offset) as usize; offset += size_of::(); - let data = Rc::new(RefCell::new({ + let data = Rc::new(RefCell::new(unsafe { from_raw_parts_mut(input.add(offset), data_len) })); offset += data_len; - let owner: &Pubkey = &*(input.add(offset) as *const Pubkey); + let owner: &Pubkey = Ptr::::ref_possibly_unaligned(input, offset); offset += size_of::(); - let executable = (input.add(offset) as *const u8).read_unaligned() != 0; + let executable = Ptr::::read_possibly_unaligned(input, offset) != 0; offset += size_of::(); - let rent_epoch = (input.add(offset) as *const u64).read_unaligned(); + let rent_epoch = Ptr::::read_possibly_unaligned(input, offset); offset += size_of::(); accounts.push(AccountInfo { @@ -1071,15 +1103,15 @@ mod tests { // instruction data - let instruction_data_len = (input.add(offset) as *const u64).read_unaligned() as usize; + let instruction_data_len = Ptr::::read_possibly_unaligned(input, offset) as usize; offset += size_of::(); - let instruction_data = { from_raw_parts(input.add(offset), instruction_data_len) }; + let instruction_data = unsafe { from_raw_parts(input.add(offset), instruction_data_len) }; offset += instruction_data_len; // program Id - let program_id: &Pubkey = &*(input.add(offset) as *const Pubkey); + let program_id = Ptr::::ref_possibly_unaligned(input, offset); (program_id, accounts, instruction_data) } From f50e37da39f4fa102fcd5c879695beca742a9693 Mon Sep 17 00:00:00 2001 From: Ryo Onodera Date: Tue, 9 May 2023 14:05:50 +0900 Subject: [PATCH 12/12] Remove now-resolved clippy exception --- ci/test-checks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/test-checks.sh b/ci/test-checks.sh index fa166144381a8f..a2ea2a6c24b9ac 100755 --- a/ci/test-checks.sh +++ b/ci/test-checks.sh @@ -75,7 +75,7 @@ fi _ ci/order-crates-for-publishing.py -nightly_clippy_allows=(--allow=clippy::redundant_clone --allow clippy::match-result-ok) +nightly_clippy_allows=(--allow=clippy::redundant_clone) # run nightly clippy for `sdk/` as there's a moderate amount of nightly-only code there _ scripts/cargo-for-all-lock-files.sh -- "+${rust_nightly}" clippy --workspace --all-targets --features dummy-for-ci-check -- \