Auto merge of #17329 - Nilstrieb:rustc_deprecated_safe_2024, r=Veykril

Don't mark `#[rustc_deprecated_safe_2024]` functions as unsafe

`std::env::set_var` will be unsafe in edition 2024, but not before it. I couldn't quite figure out how to check for the span properly, so for now we just turn the false positives into false negatives, which are less bad.
This commit is contained in:
bors 2024-06-03 12:44:21 +00:00
commit 89218cf29c
3 changed files with 23 additions and 0 deletions

View file

@ -628,6 +628,10 @@ pub const INERT_ATTRIBUTES: &[BuiltinAttribute] = &[
rustc_safe_intrinsic, Normal, template!(Word), WarnFollowing, rustc_safe_intrinsic, Normal, template!(Word), WarnFollowing,
"the `#[rustc_safe_intrinsic]` attribute is used internally to mark intrinsics as safe" "the `#[rustc_safe_intrinsic]` attribute is used internally to mark intrinsics as safe"
), ),
rustc_attr!(
rustc_deprecated_safe_2024, Normal, template!(Word), WarnFollowing,
"the `#[rustc_safe_intrinsic]` marks functions as unsafe in Rust 2024",
),
// ========================================================================== // ==========================================================================
// Internal attributes, Testing: // Internal attributes, Testing:

View file

@ -534,6 +534,11 @@ fn parent_generic_def(db: &dyn DefDatabase, def: GenericDefId) -> Option<Generic
pub fn is_fn_unsafe_to_call(db: &dyn HirDatabase, func: FunctionId) -> bool { pub fn is_fn_unsafe_to_call(db: &dyn HirDatabase, func: FunctionId) -> bool {
let data = db.function_data(func); let data = db.function_data(func);
if data.has_unsafe_kw() { if data.has_unsafe_kw() {
// Functions that are `#[rustc_deprecated_safe_2024]` are safe to call before 2024.
if db.attrs(func.into()).by_key("rustc_deprecated_safe_2024").exists() {
// FIXME: Properly check the caller span and mark it as unsafe after 2024.
return false;
}
return true; return true;
} }

View file

@ -182,6 +182,20 @@ fn main() {
); );
} }
#[test]
fn no_missing_unsafe_diagnostic_with_deprecated_safe_2024() {
check_diagnostics(
r#"
#[rustc_deprecated_safe_2024]
fn set_var() {}
fn main() {
set_var();
}
"#,
);
}
#[test] #[test]
fn add_unsafe_block_when_dereferencing_a_raw_pointer() { fn add_unsafe_block_when_dereferencing_a_raw_pointer() {
check_fix( check_fix(