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

Commit 7d29c26

Browse files
authored
Remove auto traits from ICE work-around (#26098)
1 parent a5cf72e commit 7d29c26

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))
@@ -180,48 +152,48 @@ fn dummy_process_instruction(
180152
/// Dynamic feature transitions for builtin programs
181153
fn builtin_feature_transitions() -> Vec<BuiltinFeatureTransition> {
182154
vec![
183-
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::Add {
155+
BuiltinFeatureTransition::Add {
184156
builtin: Builtin::new(
185157
"compute_budget_program",
186158
solana_sdk::compute_budget::id(),
187159
solana_compute_budget_program::process_instruction,
188160
),
189161
feature_id: feature_set::add_compute_budget_program::id(),
190-
}),
191-
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::RemoveOrRetain {
162+
},
163+
BuiltinFeatureTransition::RemoveOrRetain {
192164
previously_added_builtin: Builtin::new(
193165
"secp256k1_program",
194166
solana_sdk::secp256k1_program::id(),
195167
dummy_process_instruction,
196168
),
197169
addition_feature_id: feature_set::secp256k1_program_enabled::id(),
198170
removal_feature_id: feature_set::prevent_calling_precompiles_as_programs::id(),
199-
}),
200-
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::RemoveOrRetain {
171+
},
172+
BuiltinFeatureTransition::RemoveOrRetain {
201173
previously_added_builtin: Builtin::new(
202174
"ed25519_program",
203175
solana_sdk::ed25519_program::id(),
204176
dummy_process_instruction,
205177
),
206178
addition_feature_id: feature_set::ed25519_program_enabled::id(),
207179
removal_feature_id: feature_set::prevent_calling_precompiles_as_programs::id(),
208-
}),
209-
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::Add {
180+
},
181+
BuiltinFeatureTransition::Add {
210182
builtin: Builtin::new(
211183
"address_lookup_table_program",
212184
solana_address_lookup_table_program::id(),
213185
solana_address_lookup_table_program::processor::process_instruction,
214186
),
215187
feature_id: feature_set::versioned_tx_message_enabled::id(),
216-
}),
217-
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::Add {
188+
},
189+
BuiltinFeatureTransition::Add {
218190
builtin: Builtin::new(
219191
"zk_token_proof_program",
220192
solana_zk_token_sdk::zk_token_proof_program::id(),
221193
solana_zk_token_proof_program::process_instruction,
222194
),
223195
feature_id: feature_set::zk_token_sdk_enabled::id(),
224-
}),
196+
},
225197
]
226198
}
227199

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)