// 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);
}
