From 0faef0a96ee50541ccbc2047ee2e1a6a372e8763 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Thu, 2 Jun 2022 08:30:32 -0400 Subject: [PATCH 1/2] make cenum_impl_drop_cast deny-by-default and show up as future breakage diagnostic --- compiler/rustc_lint_defs/src/builtin.rs | 3 ++- src/test/run-pass-valgrind/cast-enum-with-dtor.rs | 2 +- src/test/ui/cenum_impl_drop_cast.stderr | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/compiler/rustc_lint_defs/src/builtin.rs b/compiler/rustc_lint_defs/src/builtin.rs index a067534b18938..d5f14134ea28c 100644 --- a/compiler/rustc_lint_defs/src/builtin.rs +++ b/compiler/rustc_lint_defs/src/builtin.rs @@ -2650,10 +2650,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 ", + 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 93c47d32f92a1..998d202b11736 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 8d847a0c80b16..98c3310573311 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 + From f6b41e346b9cd20d26b5196ba622137e43fc8a5c Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Thu, 2 Jun 2022 09:41:13 -0400 Subject: [PATCH 2/2] fix lint doctests --- compiler/rustc_lint_defs/src/builtin.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/compiler/rustc_lint_defs/src/builtin.rs b/compiler/rustc_lint_defs/src/builtin.rs index d5f14134ea28c..b1bfd612b90e5 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,