diff options
| author | Maybe Waffle <waffle.lapkin@gmail.com> | 2023-05-29 15:05:24 +0000 |
|---|---|---|
| committer | Maybe Waffle <waffle.lapkin@gmail.com> | 2023-06-08 12:33:17 +0000 |
| commit | 70f28a91108644a9db8b35ab594a6f978d736c6d (patch) | |
| tree | f135a1d6205cba766a969cf8f6c99de150c3e836 /tests/ui/enum-discriminant/discriminant-overflow.rs | |
| parent | a0df04c0f2b9c0415c53e3cee8c4f9fa394a37b2 (diff) | |
| download | rust-70f28a91108644a9db8b35ab594a6f978d736c6d.tar.gz rust-70f28a91108644a9db8b35ab594a6f978d736c6d.zip | |
Move tests from `ui/discrim` dir
Diffstat (limited to 'tests/ui/enum-discriminant/discriminant-overflow.rs')
| -rw-r--r-- | tests/ui/enum-discriminant/discriminant-overflow.rs | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/tests/ui/enum-discriminant/discriminant-overflow.rs b/tests/ui/enum-discriminant/discriminant-overflow.rs new file mode 100644 index 00000000000..774ced93c17 --- /dev/null +++ b/tests/ui/enum-discriminant/discriminant-overflow.rs @@ -0,0 +1,99 @@ +// Issue 23030: Detect overflowing discriminant + +// See also run-pass/discrim-explicit-23030.rs where the suggested +// workaround is tested. + +fn f_i8() { + #[repr(i8)] + enum A { + Ok = i8::MAX - 1, + Ok2, + OhNo, //~ ERROR enum discriminant overflowed [E0370] + } + + let x = A::Ok; +} + +fn f_u8() { + #[repr(u8)] + enum A { + Ok = u8::MAX - 1, + Ok2, + OhNo, //~ ERROR enum discriminant overflowed [E0370] + } + + let x = A::Ok; +} + +fn f_i16() { + #[repr(i16)] + enum A { + Ok = i16::MAX - 1, + Ok2, + OhNo, //~ ERROR enum discriminant overflowed [E0370] + } + + let x = A::Ok; +} + +fn f_u16() { + #[repr(u16)] + enum A { + Ok = u16::MAX - 1, + Ok2, + OhNo, //~ ERROR enum discriminant overflowed [E0370] + //~| overflowed on value after 65535 + } + + let x = A::Ok; +} + +fn f_i32() { + #[repr(i32)] + enum A { + Ok = i32::MAX - 1, + Ok2, + OhNo, //~ ERROR enum discriminant overflowed [E0370] + //~| overflowed on value after 2147483647 + } + + let x = A::Ok; +} + +fn f_u32() { + #[repr(u32)] + enum A { + Ok = u32::MAX - 1, + Ok2, + OhNo, //~ ERROR enum discriminant overflowed [E0370] + //~| overflowed on value after 4294967295 + } + + let x = A::Ok; +} + +fn f_i64() { + #[repr(i64)] + enum A { + Ok = i64::MAX - 1, + Ok2, + OhNo, //~ ERROR enum discriminant overflowed [E0370] + //~| overflowed on value after 9223372036854775807 + } + + let x = A::Ok; +} + +fn f_u64() { + #[repr(u64)] + enum A { + Ok = u64::MAX - 1, + Ok2, + OhNo, //~ ERROR enum discriminant overflowed [E0370] + //~| overflowed on value after 18446744073709551615 + } + + let x = A::Ok; +} + +fn main() { } |
