mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-16 17:03:35 +00:00
#[deprecated_safe_2024]
: Also use the // TODO:
hint in the compiler error
This doesn't work for translated compiler error messages.
This commit is contained in:
parent
399ef23d2b
commit
811d7dd113
@ -643,7 +643,7 @@ pub const BUILTIN_ATTRIBUTES: &[BuiltinAttribute] = &[
|
||||
through unstable paths"
|
||||
),
|
||||
rustc_attr!(
|
||||
rustc_deprecated_safe_2024, Normal, template!(List: r#"todo = "...""#),
|
||||
rustc_deprecated_safe_2024, Normal, template!(List: r#"audit_that = "...""#),
|
||||
ErrorFollowing, EncodeCrossCrate::Yes,
|
||||
"rustc_deprecated_safe_2024 is supposed to be used in libstd only",
|
||||
),
|
||||
|
@ -30,7 +30,7 @@ mir_build_call_to_deprecated_safe_fn_requires_unsafe =
|
||||
call to deprecated safe function `{$function}` is unsafe and requires unsafe block
|
||||
.note = consult the function's documentation for information on how to avoid undefined behavior
|
||||
.label = call to unsafe function
|
||||
.suggestion = you can wrap the call in an `unsafe` block if you can guarantee its unsafe preconditions
|
||||
.suggestion = you can wrap the call in an `unsafe` block if you can guarantee {$guarantee}
|
||||
|
||||
mir_build_call_to_fn_with_requires_unsafe =
|
||||
call to function `{$function}` with `#[target_feature]` is unsafe and requires unsafe block
|
||||
|
@ -102,18 +102,23 @@ impl<'tcx> UnsafetyVisitor<'_, 'tcx> {
|
||||
.meta_item_list()
|
||||
.unwrap_or_default()
|
||||
.into_iter()
|
||||
.find(|item| item.has_name(sym::todo))
|
||||
.find(|item| item.has_name(sym::audit_that))
|
||||
.map(|item| {
|
||||
item.value_str().expect(
|
||||
"`#[rustc_deprecated_safe_2024(todo)]` must have a string value",
|
||||
"`#[rustc_deprecated_safe_2024(audit_that)]` must have a string value",
|
||||
)
|
||||
});
|
||||
|
||||
let sm = self.tcx.sess.source_map();
|
||||
let guarantee = suggestion
|
||||
.as_ref()
|
||||
.map(|suggestion| format!("that {}", suggestion))
|
||||
.unwrap_or_else(|| String::from("its unsafe preconditions"));
|
||||
let suggestion = suggestion
|
||||
.and_then(|suggestion| {
|
||||
sm.indentation_before(span)
|
||||
.map(|indent| format!("{}// TODO: {}\n", indent, suggestion)) // ignore-tidy-todo
|
||||
sm.indentation_before(span).map(|indent| {
|
||||
format!("{}// TODO: Audit that {}.\n", indent, suggestion) // ignore-tidy-todo
|
||||
})
|
||||
})
|
||||
.unwrap_or_default();
|
||||
|
||||
@ -124,6 +129,7 @@ impl<'tcx> UnsafetyVisitor<'_, 'tcx> {
|
||||
CallToDeprecatedSafeFnRequiresUnsafe {
|
||||
span,
|
||||
function: with_no_trimmed_paths!(self.tcx.def_path_str(id)),
|
||||
guarantee,
|
||||
sub: CallToDeprecatedSafeFnRequiresUnsafeSub {
|
||||
start_of_line_suggestion: suggestion,
|
||||
start_of_line: sm.span_extend_to_line(span).shrink_to_lo(),
|
||||
|
@ -28,6 +28,7 @@ pub(crate) struct CallToDeprecatedSafeFnRequiresUnsafe {
|
||||
#[label]
|
||||
pub(crate) span: Span,
|
||||
pub(crate) function: String,
|
||||
pub(crate) guarantee: String,
|
||||
#[subdiagnostic]
|
||||
pub(crate) sub: CallToDeprecatedSafeFnRequiresUnsafeSub,
|
||||
}
|
||||
|
@ -472,6 +472,7 @@ symbols! {
|
||||
attr,
|
||||
attr_literals,
|
||||
attributes,
|
||||
audit_that,
|
||||
augmented_assignments,
|
||||
auto_traits,
|
||||
automatically_derived,
|
||||
@ -1897,7 +1898,6 @@ symbols! {
|
||||
to_string,
|
||||
to_string_method,
|
||||
to_vec,
|
||||
todo,
|
||||
todo_macro,
|
||||
tool_attributes,
|
||||
tool_lints,
|
||||
|
@ -359,7 +359,7 @@ impl Error for VarError {
|
||||
#[cfg_attr(
|
||||
not(bootstrap),
|
||||
rustc_deprecated_safe_2024(
|
||||
todo = "Audit that the environment access only happens in single-threaded code."
|
||||
audit_that = "the environment access only happens in single-threaded code"
|
||||
)
|
||||
)]
|
||||
#[stable(feature = "env", since = "1.0.0")]
|
||||
@ -429,7 +429,7 @@ pub unsafe fn set_var<K: AsRef<OsStr>, V: AsRef<OsStr>>(key: K, value: V) {
|
||||
#[cfg_attr(
|
||||
not(bootstrap),
|
||||
rustc_deprecated_safe_2024(
|
||||
todo = "Audit that the environment access only happens in single-threaded code."
|
||||
audit_that = "the environment access only happens in single-threaded code"
|
||||
)
|
||||
)]
|
||||
#[stable(feature = "env", since = "1.0.0")]
|
||||
|
@ -11,7 +11,7 @@ note: the lint level is defined here
|
||||
|
|
||||
LL | #![deny(deprecated_safe_2024)]
|
||||
| ^^^^^^^^^^^^^^^^^^^^
|
||||
help: you can wrap the call in an `unsafe` block if you can guarantee its unsafe preconditions
|
||||
help: you can wrap the call in an `unsafe` block if you can guarantee that the environment access only happens in single-threaded code
|
||||
|
|
||||
LL + // TODO: Audit that the environment access only happens in single-threaded code.
|
||||
LL ~ unsafe { env::set_var("FOO", "BAR") };
|
||||
@ -25,7 +25,7 @@ LL | env::remove_var("FOO");
|
||||
|
|
||||
= warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2024!
|
||||
= note: for more information, see issue #27970 <https://github.com/rust-lang/rust/issues/27970>
|
||||
help: you can wrap the call in an `unsafe` block if you can guarantee its unsafe preconditions
|
||||
help: you can wrap the call in an `unsafe` block if you can guarantee that the environment access only happens in single-threaded code
|
||||
|
|
||||
LL + // TODO: Audit that the environment access only happens in single-threaded code.
|
||||
LL ~ unsafe { env::remove_var("FOO") };
|
||||
|
Loading…
Reference in New Issue
Block a user