Skip to content
This repository was archived by the owner on Jan 22, 2025. It is now read-only.

Commit 5952f4e

Browse files
brooksprumomergify[bot]
authored andcommitted
Remove auto traits from ICE work-around (#26098)
(cherry picked from commit 7d29c26)
1 parent fa09763 commit 5952f4e

File tree

2 files changed

+17
-53
lines changed

2 files changed

+17
-53
lines changed

runtime/src/builtins.rs

Lines changed: 17 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
#[cfg(RUSTC_WITH_SPECIALIZATION)]
22
use solana_frozen_abi::abi_example::AbiExample;
3-
#[cfg(debug_assertions)]
4-
#[allow(deprecated)]
5-
use solana_sdk::AutoTraitBreakSendSync;
63
use {
74
crate::system_instruction_processor,
85
solana_program_runtime::invoke_context::{InvokeContext, ProcessInstructionWithContext},
@@ -69,7 +66,7 @@ pub enum BuiltinAction {
6966
/// State transition enum used for adding and removing builtin programs through
7067
/// feature activations.
7168
#[derive(Debug, Clone, AbiExample)]
72-
enum InnerBuiltinFeatureTransition {
69+
pub enum BuiltinFeatureTransition {
7370
/// Add a builtin program if a feature is activated.
7471
Add {
7572
builtin: Builtin,
@@ -84,51 +81,26 @@ enum InnerBuiltinFeatureTransition {
8481
},
8582
}
8683

87-
#[allow(deprecated)]
88-
#[cfg(debug_assertions)]
89-
impl AutoTraitBreakSendSync for InnerBuiltinFeatureTransition {}
90-
91-
#[derive(AbiExample, Clone, Debug)]
92-
pub struct BuiltinFeatureTransition(InnerBuiltinFeatureTransition);
93-
94-
// https://github.com/solana-labs/solana/pull/23233 added `BuiltinFeatureTransition`
95-
// to `Bank` which triggers https://github.com/rust-lang/rust/issues/92987 while
96-
// attempting to resolve `Sync` on `BankRc` in `AccountsBackgroundService::new` ala,
97-
//
98-
// query stack during panic:
99-
// #0 [evaluate_obligation] evaluating trait selection obligation `bank::BankRc: core::marker::Sync`
100-
// #1 [typeck] type-checking `accounts_background_service::<impl at runtime/src/accounts_background_service.rs:358:1: 520:2>::new`
101-
// #2 [typeck_item_bodies] type-checking all item bodies
102-
// #3 [analysis] running analysis passes on this crate
103-
// end of query stack
104-
//
105-
// Yoloing a `Sync` onto it avoids the auto trait evaluation and thus the ICE.
106-
//
107-
// We should remove this when upgrading to Rust 1.60.0, where the bug has been
108-
// fixed by https://github.com/rust-lang/rust/pull/93064
109-
unsafe impl Send for BuiltinFeatureTransition {}
110-
unsafe impl Sync for BuiltinFeatureTransition {}
111-
11284
impl BuiltinFeatureTransition {
11385
pub fn to_action(
11486
&self,
11587
should_apply_action_for_feature: &impl Fn(&Pubkey) -> bool,
11688
) -> Option<BuiltinAction> {
117-
match &self.0 {
118-
InnerBuiltinFeatureTransition::Add {
89+
match self {
90+
Self::Add {
11991
builtin,
120-
ref feature_id,
92+
feature_id,
12193
} => {
12294
if should_apply_action_for_feature(feature_id) {
12395
Some(BuiltinAction::Add(builtin.clone()))
12496
} else {
12597
None
12698
}
12799
}
128-
InnerBuiltinFeatureTransition::RemoveOrRetain {
100+
Self::RemoveOrRetain {
129101
previously_added_builtin,
130-
ref addition_feature_id,
131-
ref removal_feature_id,
102+
addition_feature_id,
103+
removal_feature_id,
132104
} => {
133105
if should_apply_action_for_feature(removal_feature_id) {
134106
Some(BuiltinAction::Remove(previously_added_builtin.id))
@@ -181,48 +153,48 @@ fn dummy_process_instruction(
181153
/// Dynamic feature transitions for builtin programs
182154
fn builtin_feature_transitions() -> Vec<BuiltinFeatureTransition> {
183155
vec![
184-
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::Add {
156+
BuiltinFeatureTransition::Add {
185157
builtin: Builtin::new(
186158
"compute_budget_program",
187159
solana_sdk::compute_budget::id(),
188160
solana_compute_budget_program::process_instruction,
189161
),
190162
feature_id: feature_set::add_compute_budget_program::id(),
191-
}),
192-
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::RemoveOrRetain {
163+
},
164+
BuiltinFeatureTransition::RemoveOrRetain {
193165
previously_added_builtin: Builtin::new(
194166
"secp256k1_program",
195167
solana_sdk::secp256k1_program::id(),
196168
dummy_process_instruction,
197169
),
198170
addition_feature_id: feature_set::secp256k1_program_enabled::id(),
199171
removal_feature_id: feature_set::prevent_calling_precompiles_as_programs::id(),
200-
}),
201-
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::RemoveOrRetain {
172+
},
173+
BuiltinFeatureTransition::RemoveOrRetain {
202174
previously_added_builtin: Builtin::new(
203175
"ed25519_program",
204176
solana_sdk::ed25519_program::id(),
205177
dummy_process_instruction,
206178
),
207179
addition_feature_id: feature_set::ed25519_program_enabled::id(),
208180
removal_feature_id: feature_set::prevent_calling_precompiles_as_programs::id(),
209-
}),
210-
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::Add {
181+
},
182+
BuiltinFeatureTransition::Add {
211183
builtin: Builtin::new(
212184
"address_lookup_table_program",
213185
solana_address_lookup_table_program::id(),
214186
solana_address_lookup_table_program::processor::process_instruction,
215187
),
216188
feature_id: feature_set::versioned_tx_message_enabled::id(),
217-
}),
218-
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::Add {
189+
},
190+
BuiltinFeatureTransition::Add {
219191
builtin: Builtin::new(
220192
"zk_token_proof_program",
221193
solana_zk_token_sdk::zk_token_proof_program::id(),
222194
solana_zk_token_proof_program::process_instruction,
223195
),
224196
feature_id: feature_set::zk_token_sdk_enabled::id(),
225-
}),
197+
},
226198
]
227199
}
228200

sdk/src/lib.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,6 @@ pub use solana_sdk_macro::pubkeys;
9797
#[rustversion::since(1.46.0)]
9898
pub use solana_sdk_macro::respan;
9999

100-
#[deprecated(
101-
since = "1.9.0",
102-
note = "use only to break https://github.com/rust-lang/rust/issues/92987. remove when we move to Rust 1.60.0"
103-
)]
104-
#[doc(hidden)]
105-
#[cfg(debug_assertions)]
106-
pub trait AutoTraitBreakSendSync: Send + Sync {}
107-
108100
// Unused `solana_sdk::program_stubs!()` macro retained for source backwards compatibility with older programs
109101
#[macro_export]
110102
#[deprecated(

0 commit comments

Comments
 (0)