From 6196b928a44f469e37dc746a84a2175a560f09d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lauren=C8=9Biu=20Nicola?= Date: Thu, 18 Nov 2021 10:12:29 +0200 Subject: [PATCH] Fix proc macro ABI version checks --- crates/proc_macro_srv/src/abis/mod.rs | 36 +++++++++++++++------------ 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/crates/proc_macro_srv/src/abis/mod.rs b/crates/proc_macro_srv/src/abis/mod.rs index 5d7c623b0a..0de15b4832 100644 --- a/crates/proc_macro_srv/src/abis/mod.rs +++ b/crates/proc_macro_srv/src/abis/mod.rs @@ -69,22 +69,26 @@ impl Abi { symbol_name: String, info: RustCInfo, ) -> Result { - if info.version.0 != 1 { - Err(LoadProcMacroDylibError::UnsupportedABI) - } else if info.version.1 < 47 { - Err(LoadProcMacroDylibError::UnsupportedABI) - } else if info.version.1 < 54 { - let inner = unsafe { Abi_1_47::from_lib(lib, symbol_name) }?; - Ok(Abi::Abi1_47(inner)) - } else if info.version.1 < 56 { - let inner = unsafe { Abi_1_55::from_lib(lib, symbol_name) }?; - Ok(Abi::Abi1_55(inner)) - } else if info.version.1 < 57 { - let inner = unsafe { Abi_1_56::from_lib(lib, symbol_name) }?; - Ok(Abi::Abi1_56(inner)) - } else { - let inner = unsafe { Abi_1_58::from_lib(lib, symbol_name) }?; - Ok(Abi::Abi1_58(inner)) + // FIXME: this should use exclusive ranges when they're stable + // https://github.com/rust-lang/rust/issues/37854 + match (info.version.0, info.version.1) { + (1, 47..=54) => { + let inner = unsafe { Abi_1_47::from_lib(lib, symbol_name) }?; + Ok(Abi::Abi1_47(inner)) + } + (1, 55..=55) => { + let inner = unsafe { Abi_1_55::from_lib(lib, symbol_name) }?; + Ok(Abi::Abi1_55(inner)) + } + (1, 56..=57) => { + let inner = unsafe { Abi_1_56::from_lib(lib, symbol_name) }?; + Ok(Abi::Abi1_56(inner)) + } + (1, 58..) => { + let inner = unsafe { Abi_1_58::from_lib(lib, symbol_name) }?; + Ok(Abi::Abi1_58(inner)) + } + _ => Err(LoadProcMacroDylibError::UnsupportedABI), } }