Change unsafe_op_in_unsafe_fn to be warn-by-default from edition 2024
This commit is contained in:
parent
51a9df8c70
commit
119e0fff8a
4 changed files with 40 additions and 18 deletions
|
@ -2554,8 +2554,8 @@ declare_lint! {
|
||||||
///
|
///
|
||||||
/// The fix to this is to wrap the unsafe code in an `unsafe` block.
|
/// The fix to this is to wrap the unsafe code in an `unsafe` block.
|
||||||
///
|
///
|
||||||
/// This lint is "allow" by default since this will affect a large amount
|
/// This lint is "allow" by default on editions up to 2021, from 2024 it is
|
||||||
/// of existing code, and the exact plan for increasing the severity is
|
/// "warn" by default; the plan for increasing severity further is
|
||||||
/// still being considered. See [RFC #2585] and [issue #71668] for more
|
/// still being considered. See [RFC #2585] and [issue #71668] for more
|
||||||
/// details.
|
/// details.
|
||||||
///
|
///
|
||||||
|
@ -2567,6 +2567,7 @@ declare_lint! {
|
||||||
pub UNSAFE_OP_IN_UNSAFE_FN,
|
pub UNSAFE_OP_IN_UNSAFE_FN,
|
||||||
Allow,
|
Allow,
|
||||||
"unsafe operations in unsafe functions without an explicit unsafe block are deprecated",
|
"unsafe operations in unsafe functions without an explicit unsafe block are deprecated",
|
||||||
|
@edition Edition2024 => Warn;
|
||||||
}
|
}
|
||||||
|
|
||||||
declare_lint! {
|
declare_lint! {
|
||||||
|
|
|
@ -719,36 +719,24 @@ macro_rules! declare_lint {
|
||||||
($(#[$attr:meta])* $vis: vis $NAME: ident, $Level: ident, $desc: expr,
|
($(#[$attr:meta])* $vis: vis $NAME: ident, $Level: ident, $desc: expr,
|
||||||
$(@feature_gate = $gate:expr;)?
|
$(@feature_gate = $gate:expr;)?
|
||||||
$(@future_incompatible = FutureIncompatibleInfo { $($field:ident : $val:expr),* $(,)* }; )?
|
$(@future_incompatible = FutureIncompatibleInfo { $($field:ident : $val:expr),* $(,)* }; )?
|
||||||
|
$(@edition $lint_edition:ident => $edition_level:ident;)?
|
||||||
$($v:ident),*) => (
|
$($v:ident),*) => (
|
||||||
$(#[$attr])*
|
$(#[$attr])*
|
||||||
$vis static $NAME: &$crate::Lint = &$crate::Lint {
|
$vis static $NAME: &$crate::Lint = &$crate::Lint {
|
||||||
name: stringify!($NAME),
|
name: stringify!($NAME),
|
||||||
default_level: $crate::$Level,
|
default_level: $crate::$Level,
|
||||||
desc: $desc,
|
desc: $desc,
|
||||||
edition_lint_opts: None,
|
|
||||||
is_plugin: false,
|
is_plugin: false,
|
||||||
$($v: true,)*
|
$($v: true,)*
|
||||||
$(feature_gate: Some($gate),)*
|
$(feature_gate: Some($gate),)?
|
||||||
$(future_incompatible: Some($crate::FutureIncompatibleInfo {
|
$(future_incompatible: Some($crate::FutureIncompatibleInfo {
|
||||||
$($field: $val,)*
|
$($field: $val,)*
|
||||||
..$crate::FutureIncompatibleInfo::default_fields_for_macro()
|
..$crate::FutureIncompatibleInfo::default_fields_for_macro()
|
||||||
}),)*
|
}),)?
|
||||||
|
$(edition_lint_opts: Some(($crate::Edition::$lint_edition, $crate::$edition_level)),)?
|
||||||
..$crate::Lint::default_fields_for_macro()
|
..$crate::Lint::default_fields_for_macro()
|
||||||
};
|
};
|
||||||
);
|
);
|
||||||
($(#[$attr:meta])* $vis: vis $NAME: ident, $Level: ident, $desc: expr,
|
|
||||||
$lint_edition: expr => $edition_level: ident
|
|
||||||
) => (
|
|
||||||
$(#[$attr])*
|
|
||||||
$vis static $NAME: &$crate::Lint = &$crate::Lint {
|
|
||||||
name: stringify!($NAME),
|
|
||||||
default_level: $crate::$Level,
|
|
||||||
desc: $desc,
|
|
||||||
edition_lint_opts: Some(($lint_edition, $crate::Level::$edition_level)),
|
|
||||||
report_in_external_macro: false,
|
|
||||||
is_plugin: false,
|
|
||||||
};
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
|
|
17
tests/ui/unsafe/edition-2024-unsafe_op_in_unsafe_fn.rs
Normal file
17
tests/ui/unsafe/edition-2024-unsafe_op_in_unsafe_fn.rs
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
// edition: 2024
|
||||||
|
// compile-flags: -Zunstable-options
|
||||||
|
// check-pass
|
||||||
|
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
#![deny(unused_unsafe)]
|
||||||
|
|
||||||
|
unsafe fn unsf() {}
|
||||||
|
|
||||||
|
unsafe fn foo() {
|
||||||
|
unsf();
|
||||||
|
//~^ WARN call to unsafe function is unsafe and requires unsafe block
|
||||||
|
|
||||||
|
// no unused_unsafe
|
||||||
|
unsafe { unsf(); }
|
||||||
|
}
|
16
tests/ui/unsafe/edition-2024-unsafe_op_in_unsafe_fn.stderr
Normal file
16
tests/ui/unsafe/edition-2024-unsafe_op_in_unsafe_fn.stderr
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
warning: call to unsafe function is unsafe and requires unsafe block (error E0133)
|
||||||
|
--> $DIR/edition-2024-unsafe_op_in_unsafe_fn.rs:12:5
|
||||||
|
|
|
||||||
|
LL | unsf();
|
||||||
|
| ^^^^^^ call to unsafe function
|
||||||
|
|
|
||||||
|
= note: consult the function's documentation for information on how to avoid undefined behavior
|
||||||
|
note: an unsafe function restricts its caller, but its body is safe by default
|
||||||
|
--> $DIR/edition-2024-unsafe_op_in_unsafe_fn.rs:11:1
|
||||||
|
|
|
||||||
|
LL | unsafe fn foo() {
|
||||||
|
| ^^^^^^^^^^^^^^^
|
||||||
|
= note: `#[warn(unsafe_op_in_unsafe_fn)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue