diff options
| author | bors <bors@rust-lang.org> | 2022-06-18 00:02:52 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-06-18 00:02:52 +0000 |
| commit | aaf100597cc6986d5ebd005d58a9394dd6edef4d (patch) | |
| tree | f5199e2442f3fdc5040840843fa9b57d88d6f124 | |
| parent | c3b7d7b496b5536bb0a3d501222d2d0a8b54a69e (diff) | |
| parent | f6b41e346b9cd20d26b5196ba622137e43fc8a5c (diff) | |
| download | rust-aaf100597cc6986d5ebd005d58a9394dd6edef4d.tar.gz rust-aaf100597cc6986d5ebd005d58a9394dd6edef4d.zip | |
Auto merge of #97652 - RalfJung:cenum_impl_drop_cast, r=nagisa
make cenum_impl_drop_cast deny-by-default Also make it show up as future breakage diagnostic. In https://github.com/rust-lang/rust/pull/96862 we are proposing to change behavior of those drops *again*, so this looks like a good opportunity to increase our pressure on getting them out of the ecosystem. Looking at the [tracking issue](https://github.com/rust-lang/rust/issues/73333), so far nobody spoke up in favor of this (accidental) feature. Cc https://github.com/rust-lang/rust/issues/73333 `@oli-obk`
| -rw-r--r-- | compiler/rustc_lint_defs/src/builtin.rs | 6 | ||||
| -rw-r--r-- | src/test/run-pass-valgrind/cast-enum-with-dtor.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/cenum_impl_drop_cast.stderr | 15 |
3 files changed, 19 insertions, 4 deletions
diff --git a/compiler/rustc_lint_defs/src/builtin.rs b/compiler/rustc_lint_defs/src/builtin.rs index a067534b189..b1bfd612b90 100644 --- a/compiler/rustc_lint_defs/src/builtin.rs +++ b/compiler/rustc_lint_defs/src/builtin.rs @@ -1154,7 +1154,6 @@ declare_lint! { /// ### Example /// /// ```compile_fail - /// #![deny(unaligned_references)] /// #[repr(packed)] /// pub struct Foo { /// field1: u64, @@ -2614,7 +2613,7 @@ declare_lint! { /// /// ### Example /// - /// ```rust + /// ```compile_fail /// # #![allow(unused)] /// enum E { /// A, @@ -2650,10 +2649,11 @@ declare_lint! { /// [issue #73333]: https://github.com/rust-lang/rust/issues/73333 /// [`Copy`]: https://doc.rust-lang.org/std/marker/trait.Copy.html pub CENUM_IMPL_DROP_CAST, - Warn, + Deny, "a C-like enum implementing Drop is cast", @future_incompatible = FutureIncompatibleInfo { reference: "issue #73333 <https://github.com/rust-lang/rust/issues/73333>", + reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow, }; } diff --git a/src/test/run-pass-valgrind/cast-enum-with-dtor.rs b/src/test/run-pass-valgrind/cast-enum-with-dtor.rs index 93c47d32f92..998d202b117 100644 --- a/src/test/run-pass-valgrind/cast-enum-with-dtor.rs +++ b/src/test/run-pass-valgrind/cast-enum-with-dtor.rs @@ -1,4 +1,4 @@ -#![allow(dead_code)] +#![allow(dead_code, cenum_impl_drop_cast)] // check dtor calling order when casting enums. diff --git a/src/test/ui/cenum_impl_drop_cast.stderr b/src/test/ui/cenum_impl_drop_cast.stderr index 8d847a0c80b..98c33105733 100644 --- a/src/test/ui/cenum_impl_drop_cast.stderr +++ b/src/test/ui/cenum_impl_drop_cast.stderr @@ -14,3 +14,18 @@ LL | #![deny(cenum_impl_drop_cast)] error: aborting due to previous error +Future incompatibility report: Future breakage diagnostic: +error: cannot cast enum `E` into integer `u32` because it implements `Drop` + --> $DIR/cenum_impl_drop_cast.rs:15:13 + | +LL | let i = e as u32; + | ^^^^^^^^ + | +note: the lint level is defined here + --> $DIR/cenum_impl_drop_cast.rs:1:9 + | +LL | #![deny(cenum_impl_drop_cast)] + | ^^^^^^^^^^^^^^^^^^^^ + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #73333 <https://github.com/rust-lang/rust/issues/73333> + |
