Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/utils.rs')
-rw-r--r--crates/hir-ty/src/utils.rs15
1 files changed, 6 insertions, 9 deletions
diff --git a/crates/hir-ty/src/utils.rs b/crates/hir-ty/src/utils.rs
index 42e7edaf0f..9ec3dead17 100644
--- a/crates/hir-ty/src/utils.rs
+++ b/crates/hir-ty/src/utils.rs
@@ -270,17 +270,15 @@ pub fn is_fn_unsafe_to_call(db: &dyn HirDatabase, func: FunctionId) -> bool {
return true;
}
- let is_intrinsic = db.attrs(func.into()).by_key(&sym::rustc_intrinsic).exists()
- || data.abi.as_ref() == Some(&sym::rust_dash_intrinsic);
-
let loc = func.lookup(db.upcast());
match loc.container {
hir_def::ItemContainerId::ExternBlockId(block) => {
- if is_intrinsic || {
- let id = block.lookup(db.upcast()).id;
- id.item_tree(db.upcast())[id.value].abi.as_ref() == Some(&sym::rust_dash_intrinsic)
- } {
- // Intrinsics are unsafe unless they have the rustc_safe_intrinsic attribute
+ 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
!db.attrs(func.into()).by_key(&sym::rustc_safe_intrinsic).exists()
} else {
// Function in an `extern` block are always unsafe to call, except when
@@ -288,7 +286,6 @@ pub fn is_fn_unsafe_to_call(db: &dyn HirDatabase, func: FunctionId) -> bool {
!data.is_safe()
}
}
- _ if is_intrinsic => !db.attrs(func.into()).by_key(&sym::rustc_safe_intrinsic).exists(),
_ => false,
}
}