diff options
| author | Dylan DPC <dylan.dpc@gmail.com> | 2020-03-21 22:56:20 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-03-21 22:56:20 +0100 |
| commit | ecf3ef52a6f986863cce5eb749b73e182db3f36e (patch) | |
| tree | 415fe822289721b9e69ae33c95110dbd51aed057 /src/test | |
| parent | ce0af8a5bd90de722d5653965f7edcf2c302cf59 (diff) | |
| parent | 96bbd1ccb6c210318d5ba90e7b68430b643e470a (diff) | |
| download | rust-ecf3ef52a6f986863cce5eb749b73e182db3f36e.tar.gz rust-ecf3ef52a6f986863cce5eb749b73e182db3f36e.zip | |
Rollup merge of #70126 - wesleywiser:fix_miri_ice_neg_zst_enum_discr, r=RalfJung,eddyb
Fix ICE caused by truncating a negative ZST enum discriminant Fixes #70114 r? @oli-obk or @RalfJung
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/ui/consts/cast-discriminant-zst-enum.rs | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/test/ui/consts/cast-discriminant-zst-enum.rs b/src/test/ui/consts/cast-discriminant-zst-enum.rs new file mode 100644 index 00000000000..a7725812011 --- /dev/null +++ b/src/test/ui/consts/cast-discriminant-zst-enum.rs @@ -0,0 +1,47 @@ +// run-pass +// Test a ZST enum whose dicriminant is ~0i128. This caused an ICE when casting to a i32. + +#[derive(Copy, Clone)] +enum Nums { + NegOne = -1, +} + +const NEG_ONE_I8: i8 = Nums::NegOne as i8; +const NEG_ONE_I16: i16 = Nums::NegOne as i16; +const NEG_ONE_I32: i32 = Nums::NegOne as i32; +const NEG_ONE_I64: i64 = Nums::NegOne as i64; +const NEG_ONE_I128: i128 = Nums::NegOne as i128; + +#[inline(never)] +fn identity<T>(t: T) -> T { t } + +fn test_as_arg(n: Nums) { + assert_eq!(-1i8, n as i8); + assert_eq!(-1i16, n as i16); + assert_eq!(-1i32, n as i32); + assert_eq!(-1i64, n as i64); + assert_eq!(-1i128, n as i128); +} + +fn main() { + let kind = Nums::NegOne; + assert_eq!(-1i8, kind as i8); + assert_eq!(-1i16, kind as i16); + assert_eq!(-1i32, kind as i32); + assert_eq!(-1i64, kind as i64); + assert_eq!(-1i128, kind as i128); + + assert_eq!(-1i8, identity(kind) as i8); + assert_eq!(-1i16, identity(kind) as i16); + assert_eq!(-1i32, identity(kind) as i32); + assert_eq!(-1i64, identity(kind) as i64); + assert_eq!(-1i128, identity(kind) as i128); + + test_as_arg(Nums::NegOne); + + assert_eq!(-1i8, NEG_ONE_I8); + assert_eq!(-1i16, NEG_ONE_I16); + assert_eq!(-1i32, NEG_ONE_I32); + assert_eq!(-1i64, NEG_ONE_I64); + assert_eq!(-1i128, NEG_ONE_I128); +} |
