deny-by-default & report in deps uninhabited_static

This commit is contained in:
Waffle Lapkin
2026-02-19 13:53:58 +01:00
parent 8931f23941
commit 9b1f20d20d
3 changed files with 60 additions and 15 deletions
+5 -3
View File
@@ -2718,12 +2718,13 @@
///
/// ### Example
///
/// ```rust
#[cfg_attr(bootstrap, doc = "```rust")]
#[cfg_attr(not(bootstrap), doc = "```rust,compile_fail")]
/// enum Void {}
/// unsafe extern {
/// static EXTERN: Void;
/// }
/// ```
#[doc = "```"]
///
/// {{produces}}
///
@@ -2734,10 +2735,11 @@
/// compiler which assumes that there are no initialized uninhabited places (such as locals or
/// statics). This was accidentally allowed, but is being phased out.
pub UNINHABITED_STATIC,
Warn,
Deny,
"uninhabited static",
@future_incompatible = FutureIncompatibleInfo {
reason: fcw!(FutureReleaseError #74840),
report_in_deps: true,
};
}
-1
View File
@@ -1,5 +1,4 @@
#![feature(never_type)]
#![deny(uninhabited_static)]
enum Void {}
extern "C" {
+55 -11
View File
@@ -1,5 +1,5 @@
error: static of uninhabited type
--> $DIR/uninhabited-static.rs:12:1
--> $DIR/uninhabited-static.rs:11:1
|
LL | static VOID2: Void = unsafe { std::mem::transmute(()) };
| ^^^^^^^^^^^^^^^^^^
@@ -7,14 +7,10 @@ LL | static VOID2: Void = unsafe { std::mem::transmute(()) };
= note: uninhabited statics cannot be initialized, and any access would be an immediate error
= 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 #74840 <https://github.com/rust-lang/rust/issues/74840>
note: the lint level is defined here
--> $DIR/uninhabited-static.rs:2:9
|
LL | #![deny(uninhabited_static)]
| ^^^^^^^^^^^^^^^^^^
= note: `#[deny(uninhabited_static)]` (part of `#[deny(future_incompatible)]`) on by default
error: static of uninhabited type
--> $DIR/uninhabited-static.rs:15:1
--> $DIR/uninhabited-static.rs:14:1
|
LL | static NEVER2: Void = unsafe { std::mem::transmute(()) };
| ^^^^^^^^^^^^^^^^^^^
@@ -24,7 +20,7 @@ LL | static NEVER2: Void = unsafe { std::mem::transmute(()) };
= note: for more information, see issue #74840 <https://github.com/rust-lang/rust/issues/74840>
error: static of uninhabited type
--> $DIR/uninhabited-static.rs:6:5
--> $DIR/uninhabited-static.rs:5:5
|
LL | static VOID: Void;
| ^^^^^^^^^^^^^^^^^
@@ -34,7 +30,7 @@ LL | static VOID: Void;
= note: for more information, see issue #74840 <https://github.com/rust-lang/rust/issues/74840>
error: static of uninhabited type
--> $DIR/uninhabited-static.rs:8:5
--> $DIR/uninhabited-static.rs:7:5
|
LL | static NEVER: !;
| ^^^^^^^^^^^^^^^
@@ -44,13 +40,13 @@ LL | static NEVER: !;
= note: for more information, see issue #74840 <https://github.com/rust-lang/rust/issues/74840>
error[E0080]: constructing invalid value of type Void: encountered a value of uninhabited type `Void`
--> $DIR/uninhabited-static.rs:12:31
--> $DIR/uninhabited-static.rs:11:31
|
LL | static VOID2: Void = unsafe { std::mem::transmute(()) };
| ^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `VOID2` failed here
error[E0080]: constructing invalid value of type Void: encountered a value of uninhabited type `Void`
--> $DIR/uninhabited-static.rs:15:32
--> $DIR/uninhabited-static.rs:14:32
|
LL | static NEVER2: Void = unsafe { std::mem::transmute(()) };
| ^^^^^^^^^^^^^^^^^^^^^^^ evaluation of `NEVER2` failed here
@@ -58,3 +54,51 @@ LL | static NEVER2: Void = unsafe { std::mem::transmute(()) };
error: aborting due to 6 previous errors
For more information about this error, try `rustc --explain E0080`.
Future incompatibility report: Future breakage diagnostic:
error: static of uninhabited type
--> $DIR/uninhabited-static.rs:11:1
|
LL | static VOID2: Void = unsafe { std::mem::transmute(()) };
| ^^^^^^^^^^^^^^^^^^
|
= note: uninhabited statics cannot be initialized, and any access would be an immediate error
= 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 #74840 <https://github.com/rust-lang/rust/issues/74840>
= note: `#[deny(uninhabited_static)]` (part of `#[deny(future_incompatible)]`) on by default
Future breakage diagnostic:
error: static of uninhabited type
--> $DIR/uninhabited-static.rs:14:1
|
LL | static NEVER2: Void = unsafe { std::mem::transmute(()) };
| ^^^^^^^^^^^^^^^^^^^
|
= note: uninhabited statics cannot be initialized, and any access would be an immediate error
= 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 #74840 <https://github.com/rust-lang/rust/issues/74840>
= note: `#[deny(uninhabited_static)]` (part of `#[deny(future_incompatible)]`) on by default
Future breakage diagnostic:
error: static of uninhabited type
--> $DIR/uninhabited-static.rs:5:5
|
LL | static VOID: Void;
| ^^^^^^^^^^^^^^^^^
|
= note: uninhabited statics cannot be initialized, and any access would be an immediate error
= 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 #74840 <https://github.com/rust-lang/rust/issues/74840>
= note: `#[deny(uninhabited_static)]` (part of `#[deny(future_incompatible)]`) on by default
Future breakage diagnostic:
error: static of uninhabited type
--> $DIR/uninhabited-static.rs:7:5
|
LL | static NEVER: !;
| ^^^^^^^^^^^^^^^
|
= note: uninhabited statics cannot be initialized, and any access would be an immediate error
= 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 #74840 <https://github.com/rust-lang/rust/issues/74840>
= note: `#[deny(uninhabited_static)]` (part of `#[deny(future_incompatible)]`) on by default