summaryrefslogtreecommitdiffstats
path: root/tests/ui/consts/const-eval/validate_uninhabited_zsts.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/consts/const-eval/validate_uninhabited_zsts.rs')
-rw-r--r--tests/ui/consts/const-eval/validate_uninhabited_zsts.rs28
1 files changed, 28 insertions, 0 deletions
diff --git a/tests/ui/consts/const-eval/validate_uninhabited_zsts.rs b/tests/ui/consts/const-eval/validate_uninhabited_zsts.rs
new file mode 100644
index 000000000..c0b326215
--- /dev/null
+++ b/tests/ui/consts/const-eval/validate_uninhabited_zsts.rs
@@ -0,0 +1,28 @@
+// stderr-per-bitwidth
+
+const fn foo() -> ! {
+ unsafe { std::mem::transmute(()) }
+ //~^ ERROR evaluation of constant value failed
+ //~| WARN the type `!` does not permit zero-initialization [invalid_value]
+}
+
+// Type defined in a submodule, so that it is not "visibly"
+// uninhabited (which would change interpreter behavior).
+pub mod empty {
+ #[derive(Clone, Copy)]
+ enum Void {}
+
+ #[derive(Clone, Copy)]
+ pub struct Empty(Void);
+}
+
+const FOO: [empty::Empty; 3] = [foo(); 3];
+
+const BAR: [empty::Empty; 3] = [unsafe { std::mem::transmute(()) }; 3];
+//~^ ERROR it is undefined behavior to use this value
+//~| WARN the type `empty::Empty` does not permit zero-initialization
+
+fn main() {
+ FOO;
+ BAR;
+}