mirror of
				https://github.com/rust-lang/rust-analyzer.git
				synced 2025-11-03 21:25:25 +00:00 
			
		
		
		
	remove rust-analyser  support for extern "rust-intrinsic" blocks
				
					
				
			This commit is contained in:
		
							parent
							
								
									7671097ff6
								
							
						
					
					
						commit
						ec5f6e43e4
					
				
					 5 changed files with 7 additions and 38 deletions
				
			
		| 
						 | 
				
			
			@ -400,7 +400,6 @@ pub enum FnAbi {
 | 
			
		|||
    Rust,
 | 
			
		||||
    RustCall,
 | 
			
		||||
    RustCold,
 | 
			
		||||
    RustIntrinsic,
 | 
			
		||||
    Stdcall,
 | 
			
		||||
    StdcallUnwind,
 | 
			
		||||
    System,
 | 
			
		||||
| 
						 | 
				
			
			@ -457,7 +456,6 @@ impl FnAbi {
 | 
			
		|||
            s if *s == sym::riscv_dash_interrupt_dash_s => FnAbi::RiscvInterruptS,
 | 
			
		||||
            s if *s == sym::rust_dash_call => FnAbi::RustCall,
 | 
			
		||||
            s if *s == sym::rust_dash_cold => FnAbi::RustCold,
 | 
			
		||||
            s if *s == sym::rust_dash_intrinsic => FnAbi::RustIntrinsic,
 | 
			
		||||
            s if *s == sym::Rust => FnAbi::Rust,
 | 
			
		||||
            s if *s == sym::stdcall_dash_unwind => FnAbi::StdcallUnwind,
 | 
			
		||||
            s if *s == sym::stdcall => FnAbi::Stdcall,
 | 
			
		||||
| 
						 | 
				
			
			@ -500,7 +498,6 @@ impl FnAbi {
 | 
			
		|||
            FnAbi::Rust => "Rust",
 | 
			
		||||
            FnAbi::RustCall => "rust-call",
 | 
			
		||||
            FnAbi::RustCold => "rust-cold",
 | 
			
		||||
            FnAbi::RustIntrinsic => "rust-intrinsic",
 | 
			
		||||
            FnAbi::Stdcall => "stdcall",
 | 
			
		||||
            FnAbi::StdcallUnwind => "stdcall-unwind",
 | 
			
		||||
            FnAbi::System => "system",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,19 +59,7 @@ impl Evaluator<'_> {
 | 
			
		|||
 | 
			
		||||
        let function_data = self.db.function_data(def);
 | 
			
		||||
        let attrs = self.db.attrs(def.into());
 | 
			
		||||
        let is_intrinsic = attrs.by_key(&sym::rustc_intrinsic).exists()
 | 
			
		||||
            // Keep this around for a bit until extern "rustc-intrinsic" abis are no longer used
 | 
			
		||||
            || (match &function_data.abi {
 | 
			
		||||
                Some(abi) => *abi == sym::rust_dash_intrinsic,
 | 
			
		||||
                None => match def.lookup(self.db.upcast()).container {
 | 
			
		||||
                    hir_def::ItemContainerId::ExternBlockId(block) => {
 | 
			
		||||
                        let id = block.lookup(self.db.upcast()).id;
 | 
			
		||||
                        id.item_tree(self.db.upcast())[id.value].abi.as_ref()
 | 
			
		||||
                            == Some(&sym::rust_dash_intrinsic)
 | 
			
		||||
                    }
 | 
			
		||||
                    _ => false,
 | 
			
		||||
                },
 | 
			
		||||
            });
 | 
			
		||||
        let is_intrinsic = attrs.by_key(&sym::rustc_intrinsic).exists();
 | 
			
		||||
 | 
			
		||||
        if is_intrinsic {
 | 
			
		||||
            return self.exec_intrinsic(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -18,7 +18,6 @@ use hir_def::{
 | 
			
		|||
    TypeOrConstParamId,
 | 
			
		||||
};
 | 
			
		||||
use hir_expand::name::Name;
 | 
			
		||||
use intern::sym;
 | 
			
		||||
use rustc_abi::TargetDataLayout;
 | 
			
		||||
use rustc_hash::FxHashSet;
 | 
			
		||||
use smallvec::{smallvec, SmallVec};
 | 
			
		||||
| 
						 | 
				
			
			@ -303,26 +302,13 @@ pub fn is_fn_unsafe_to_call(
 | 
			
		|||
 | 
			
		||||
    let loc = func.lookup(db.upcast());
 | 
			
		||||
    match loc.container {
 | 
			
		||||
        hir_def::ItemContainerId::ExternBlockId(block) => {
 | 
			
		||||
            let id = block.lookup(db.upcast()).id;
 | 
			
		||||
            let is_intrinsic_block =
 | 
			
		||||
                id.item_tree(db.upcast())[id.value].abi.as_ref() == Some(&sym::rust_dash_intrinsic);
 | 
			
		||||
            if is_intrinsic_block {
 | 
			
		||||
                // legacy intrinsics
 | 
			
		||||
                // extern "rust-intrinsic" intrinsics are unsafe unless they have the rustc_safe_intrinsic attribute
 | 
			
		||||
                if db.attrs(func.into()).by_key(&sym::rustc_safe_intrinsic).exists() {
 | 
			
		||||
                    Unsafety::Safe
 | 
			
		||||
                } else {
 | 
			
		||||
                    Unsafety::Unsafe
 | 
			
		||||
                }
 | 
			
		||||
        hir_def::ItemContainerId::ExternBlockId(_block) => {
 | 
			
		||||
            // Function in an `extern` block are always unsafe to call, except when
 | 
			
		||||
            // it is marked as `safe`.
 | 
			
		||||
            if data.is_safe() {
 | 
			
		||||
                Unsafety::Safe
 | 
			
		||||
            } else {
 | 
			
		||||
                // Function in an `extern` block are always unsafe to call, except when
 | 
			
		||||
                // it is marked as `safe`.
 | 
			
		||||
                if data.is_safe() {
 | 
			
		||||
                    Unsafety::Safe
 | 
			
		||||
                } else {
 | 
			
		||||
                    Unsafety::Unsafe
 | 
			
		||||
                }
 | 
			
		||||
                Unsafety::Unsafe
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        _ => Unsafety::Safe,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -36,7 +36,6 @@ const SUPPORTED_CALLING_CONVENTIONS: &[&str] = &[
 | 
			
		|||
    "wasm",
 | 
			
		||||
    "system",
 | 
			
		||||
    "system-unwind",
 | 
			
		||||
    "rust-intrinsic",
 | 
			
		||||
    "rust-call",
 | 
			
		||||
    "unadjusted",
 | 
			
		||||
];
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -125,7 +125,6 @@ define_symbols! {
 | 
			
		|||
    riscv_dash_interrupt_dash_s = "riscv-interrupt-s",
 | 
			
		||||
    rust_dash_call = "rust-call",
 | 
			
		||||
    rust_dash_cold = "rust-cold",
 | 
			
		||||
    rust_dash_intrinsic = "rust-intrinsic",
 | 
			
		||||
    stdcall_dash_unwind = "stdcall-unwind",
 | 
			
		||||
    system_dash_unwind = "system-unwind",
 | 
			
		||||
    sysv64_dash_unwind = "sysv64-unwind",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue