Skip to content

Commit a219b70

Browse files
committed
followup safety checks for solana-labs#23295
1 parent 4bc4406 commit a219b70

File tree

2 files changed

+35
-17
lines changed

2 files changed

+35
-17
lines changed

runtime/src/builtins.rs

+27-17
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::{
@@ -108,7 +111,7 @@ pub enum BuiltinAction {
108111
/// State transition enum used for adding and removing builtin programs through
109112
/// feature activations.
110113
#[derive(Debug, Clone, AbiExample)]
111-
pub enum BuiltinFeatureTransition {
114+
enum InnerBuiltinFeatureTransition {
112115
/// Add a builtin program if a feature is activated.
113116
Add {
114117
builtin: Builtin,
@@ -123,6 +126,13 @@ pub enum BuiltinFeatureTransition {
123126
},
124127
}
125128

129+
#[allow(deprecated)]
130+
#[cfg(debug_assertions)]
131+
impl AutoTraitBreakSendSync for InnerBuiltinFeatureTransition {}
132+
133+
#[derive(AbiExample, Clone, Debug)]
134+
pub struct BuiltinFeatureTransition(InnerBuiltinFeatureTransition);
135+
126136
// https://github.com/solana-labs/solana/pull/23233 added `BuiltinFeatureTransition`
127137
// to `Bank` which triggers https://github.com/rust-lang/rust/issues/92987 while
128138
// attempting to resolve `Sync` on `BankRc` in `AccountsBackgroundService::new` ala,
@@ -146,21 +156,21 @@ impl BuiltinFeatureTransition {
146156
&self,
147157
should_apply_action_for_feature: &impl Fn(&Pubkey) -> bool,
148158
) -> Option<BuiltinAction> {
149-
match self {
150-
Self::Add {
159+
match &self.0 {
160+
InnerBuiltinFeatureTransition::Add {
151161
builtin,
152-
feature_id,
162+
ref feature_id,
153163
} => {
154164
if should_apply_action_for_feature(feature_id) {
155165
Some(BuiltinAction::Add(builtin.clone()))
156166
} else {
157167
None
158168
}
159169
}
160-
Self::RemoveOrRetain {
170+
InnerBuiltinFeatureTransition::RemoveOrRetain {
161171
previously_added_builtin,
162-
addition_feature_id,
163-
removal_feature_id,
172+
ref addition_feature_id,
173+
ref removal_feature_id,
164174
} => {
165175
if should_apply_action_for_feature(removal_feature_id) {
166176
Some(BuiltinAction::Remove(previously_added_builtin.id))
@@ -213,48 +223,48 @@ fn dummy_process_instruction(
213223
/// Dynamic feature transitions for builtin programs
214224
fn builtin_feature_transitions() -> Vec<BuiltinFeatureTransition> {
215225
vec![
216-
BuiltinFeatureTransition::Add {
226+
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::Add {
217227
builtin: Builtin::new(
218228
"compute_budget_program",
219229
solana_sdk::compute_budget::id(),
220230
solana_compute_budget_program::process_instruction,
221231
),
222232
feature_id: feature_set::add_compute_budget_program::id(),
223-
},
224-
BuiltinFeatureTransition::RemoveOrRetain {
233+
}),
234+
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::RemoveOrRetain {
225235
previously_added_builtin: Builtin::new(
226236
"secp256k1_program",
227237
solana_sdk::secp256k1_program::id(),
228238
dummy_process_instruction,
229239
),
230240
addition_feature_id: feature_set::secp256k1_program_enabled::id(),
231241
removal_feature_id: feature_set::prevent_calling_precompiles_as_programs::id(),
232-
},
233-
BuiltinFeatureTransition::RemoveOrRetain {
242+
}),
243+
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::RemoveOrRetain {
234244
previously_added_builtin: Builtin::new(
235245
"ed25519_program",
236246
solana_sdk::ed25519_program::id(),
237247
dummy_process_instruction,
238248
),
239249
addition_feature_id: feature_set::ed25519_program_enabled::id(),
240250
removal_feature_id: feature_set::prevent_calling_precompiles_as_programs::id(),
241-
},
242-
BuiltinFeatureTransition::Add {
251+
}),
252+
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::Add {
243253
builtin: Builtin::new(
244254
"address_lookup_table_program",
245255
solana_address_lookup_table_program::id(),
246256
solana_address_lookup_table_program::processor::process_instruction,
247257
),
248258
feature_id: feature_set::versioned_tx_message_enabled::id(),
249-
},
250-
BuiltinFeatureTransition::Add {
259+
}),
260+
BuiltinFeatureTransition(InnerBuiltinFeatureTransition::Add {
251261
builtin: Builtin::new(
252262
"zk_token_proof_program",
253263
solana_zk_token_sdk::zk_token_proof_program::id(),
254264
with_program_logging!(solana_zk_token_proof_program::process_instruction),
255265
),
256266
feature_id: feature_set::zk_token_sdk_enabled::id(),
257-
},
267+
}),
258268
]
259269
}
260270

sdk/src/lib.rs

+8
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,14 @@ 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+
100108
// Unused `solana_sdk::program_stubs!()` macro retained for source backwards compatibility with older programs
101109
#[macro_export]
102110
#[deprecated(

0 commit comments

Comments
 (0)