diff options
Diffstat (limited to 'tests/ui/consts/const-eval/validate_uninhabited_zsts.rs')
-rw-r--r-- | tests/ui/consts/const-eval/validate_uninhabited_zsts.rs | 28 |
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; +} |