diff options
| author | bors <bors@rust-lang.org> | 2023-09-14 11:52:08 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-09-14 11:52:08 +0000 |
| commit | df63c5f140c3c9c12678153f20e38e6f6278150f (patch) | |
| tree | c7fe08f1d059ce6a860280143f0ab426eeda2b6d | |
| parent | d97e04fbfc149b4c3dd297df738e039bacc5c531 (diff) | |
| parent | 119e0fff8a78ed149cc855ae409de1e9d5997a9f (diff) | |
| download | rust-df63c5f140c3c9c12678153f20e38e6f6278150f.tar.gz rust-df63c5f140c3c9c12678153f20e38e6f6278150f.zip | |
Auto merge of #112038 - Nemo157:edition-2024-unsafe_op_in_unsafe_fn, r=RalfJung
Change `unsafe_op_in_unsafe_fn` to be `warn`-by-default from edition 2024 This was previously FCPed: https://github.com/rust-lang/rust/issues/71668#issuecomment-1189396886 There were two blocking requirements: * Fix the `unused_unsafe` lint, done in https://github.com/rust-lang/rust/pull/100081 * Have `cargo fix` able to fix the lint, done in https://github.com/rust-lang/rust/pull/112017
| -rw-r--r-- | compiler/rustc_lint_defs/src/builtin.rs | 5 | ||||
| -rw-r--r-- | compiler/rustc_lint_defs/src/lib.rs | 20 | ||||
| -rw-r--r-- | tests/ui/unsafe/edition-2024-unsafe_op_in_unsafe_fn.rs | 17 | ||||
| -rw-r--r-- | tests/ui/unsafe/edition-2024-unsafe_op_in_unsafe_fn.stderr | 16 |
4 files changed, 40 insertions, 18 deletions
diff --git a/compiler/rustc_lint_defs/src/builtin.rs b/compiler/rustc_lint_defs/src/builtin.rs index 2567e273e11..672a7a20148 100644 --- a/compiler/rustc_lint_defs/src/builtin.rs +++ b/compiler/rustc_lint_defs/src/builtin.rs @@ -2554,8 +2554,8 @@ declare_lint! { /// /// 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 - /// of existing code, and the exact plan for increasing the severity is + /// This lint is "allow" by default on editions up to 2021, from 2024 it is + /// "warn" by default; the plan for increasing severity further is /// still being considered. See [RFC #2585] and [issue #71668] for more /// details. /// @@ -2567,6 +2567,7 @@ declare_lint! { pub UNSAFE_OP_IN_UNSAFE_FN, Allow, "unsafe operations in unsafe functions without an explicit unsafe block are deprecated", + @edition Edition2024 => Warn; } declare_lint! { diff --git a/compiler/rustc_lint_defs/src/lib.rs b/compiler/rustc_lint_defs/src/lib.rs index 76e736859d3..ef2f7940477 100644 --- a/compiler/rustc_lint_defs/src/lib.rs +++ b/compiler/rustc_lint_defs/src/lib.rs @@ -719,36 +719,24 @@ macro_rules! declare_lint { ($(#[$attr:meta])* $vis: vis $NAME: ident, $Level: ident, $desc: expr, $(@feature_gate = $gate:expr;)? $(@future_incompatible = FutureIncompatibleInfo { $($field:ident : $val:expr),* $(,)* }; )? + $(@edition $lint_edition:ident => $edition_level:ident;)? $($v:ident),*) => ( $(#[$attr])* $vis static $NAME: &$crate::Lint = &$crate::Lint { name: stringify!($NAME), default_level: $crate::$Level, desc: $desc, - edition_lint_opts: None, is_plugin: false, $($v: true,)* - $(feature_gate: Some($gate),)* + $(feature_gate: Some($gate),)? $(future_incompatible: Some($crate::FutureIncompatibleInfo { $($field: $val,)* ..$crate::FutureIncompatibleInfo::default_fields_for_macro() - }),)* + }),)? + $(edition_lint_opts: Some(($crate::Edition::$lint_edition, $crate::$edition_level)),)? ..$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] diff --git a/tests/ui/unsafe/edition-2024-unsafe_op_in_unsafe_fn.rs b/tests/ui/unsafe/edition-2024-unsafe_op_in_unsafe_fn.rs new file mode 100644 index 00000000000..a192f3445f7 --- /dev/null +++ b/tests/ui/unsafe/edition-2024-unsafe_op_in_unsafe_fn.rs @@ -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(); } +} diff --git a/tests/ui/unsafe/edition-2024-unsafe_op_in_unsafe_fn.stderr b/tests/ui/unsafe/edition-2024-unsafe_op_in_unsafe_fn.stderr new file mode 100644 index 00000000000..fbc621f4d0e --- /dev/null +++ b/tests/ui/unsafe/edition-2024-unsafe_op_in_unsafe_fn.stderr @@ -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 + |
