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

Commit ef9ffff

Browse files
followup safety checks for #23295 (#23340)
(cherry picked from commit 5e0086c) # Conflicts: # runtime/src/builtins.rs Co-authored-by: Trent Nelson <[email protected]>
1 parent 61fea1d commit ef9ffff

File tree

2 files changed

+33
-15
lines changed

2 files changed

+33
-15
lines changed

runtime/src/builtins.rs

+25-15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
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;
36
use {
47
crate::system_instruction_processor,
58
solana_program_runtime::{
@@ -104,7 +107,7 @@ pub enum BuiltinAction {
104107
/// State transition enum used for adding and removing builtin programs through
105108
/// feature activations.
106109
#[derive(Debug, Clone, AbiExample)]
107-
pub enum BuiltinFeatureTransition {
110+
enum InnerBuiltinFeatureTransition {
108111
/// Add a builtin program if a feature is activated.
109112
Add {
110113
builtin: Builtin,
@@ -119,6 +122,13 @@ pub enum BuiltinFeatureTransition {
119122
},
120123
}
121124

125+
#[allow(deprecated)]
126+
#[cfg(debug_assertions)]
127+
impl AutoTraitBreakSendSync for InnerBuiltinFeatureTransition {}
128+
129+
#[derive(AbiExample, Clone, Debug)]
130+
pub struct BuiltinFeatureTransition(InnerBuiltinFeatureTransition);
131+
122132
// https://github.com/solana-labs/solana/pull/23233 added `BuiltinFeatureTransition`
123133
// to `Bank` which triggers https://github.com/rust-lang/rust/issues/92987 while
124134
// attempting to resolve `Sync` on `BankRc` in `AccountsBackgroundService::new` ala,
@@ -142,21 +152,21 @@ impl BuiltinFeatureTransition {
142152
&self,
143153
should_apply_action_for_feature: &impl Fn(&Pubkey) -> bool,
144154
) -> Option<BuiltinAction> {
145-
match self {
146-
Self::Add {
155+
match &self.0 {
156+
InnerBuiltinFeatureTransition::Add {
147157
builtin,
148-
feature_id,
158+
ref feature_id,
149159
} => {
150160
if should_apply_action_for_feature(feature_id) {
151161
Some(BuiltinAction::Add(builtin.clone()))
152162
} else {
153163
None
154164
}
155165
}
156-
Self::RemoveOrRetain {
166+
InnerBuiltinFeatureTransition::RemoveOrRetain {
157167
previously_added_builtin,
158-
addition_feature_id,
159-
removal_feature_id,
168+
ref addition_feature_id,
169+
ref removal_feature_id,
160170
} => {
161171
if should_apply_action_for_feature(removal_feature_id) {
162172
Some(BuiltinAction::Remove(previously_added_builtin.id))
@@ -209,40 +219,40 @@ fn dummy_process_instruction(
209219
/// Dynamic feature transitions for builtin programs
210220
fn builtin_feature_transitions() -> Vec<BuiltinFeatureTransition> {
211221
vec![
212-
BuiltinFeatureTransition::Add {
222+
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::Add {
213223
builtin: Builtin::new(
214224
"compute_budget_program",
215225
solana_sdk::compute_budget::id(),
216226
solana_compute_budget_program::process_instruction,
217227
),
218228
feature_id: feature_set::add_compute_budget_program::id(),
219-
},
220-
BuiltinFeatureTransition::RemoveOrRetain {
229+
}),
230+
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::RemoveOrRetain {
221231
previously_added_builtin: Builtin::new(
222232
"secp256k1_program",
223233
solana_sdk::secp256k1_program::id(),
224234
dummy_process_instruction,
225235
),
226236
addition_feature_id: feature_set::secp256k1_program_enabled::id(),
227237
removal_feature_id: feature_set::prevent_calling_precompiles_as_programs::id(),
228-
},
229-
BuiltinFeatureTransition::RemoveOrRetain {
238+
}),
239+
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::RemoveOrRetain {
230240
previously_added_builtin: Builtin::new(
231241
"ed25519_program",
232242
solana_sdk::ed25519_program::id(),
233243
dummy_process_instruction,
234244
),
235245
addition_feature_id: feature_set::ed25519_program_enabled::id(),
236246
removal_feature_id: feature_set::prevent_calling_precompiles_as_programs::id(),
237-
},
238-
BuiltinFeatureTransition::Add {
247+
}),
248+
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::Add {
239249
builtin: Builtin::new(
240250
"address_lookup_table_program",
241251
solana_address_lookup_table_program::id(),
242252
solana_address_lookup_table_program::processor::process_instruction,
243253
),
244254
feature_id: feature_set::versioned_tx_message_enabled::id(),
245-
},
255+
}),
246256
]
247257
}
248258

sdk/src/lib.rs

+8
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,14 @@ pub use solana_sdk_macro::pubkeys;
9696
#[rustversion::since(1.46.0)]
9797
pub use solana_sdk_macro::respan;
9898

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

0 commit comments

Comments
 (0)