50 lines
1.2 KiB
Rust
50 lines
1.2 KiB
Rust
|
// run-pass
|
||
|
#![feature(core_intrinsics)]
|
||
|
|
||
|
use std::intrinsics::discriminant_value;
|
||
|
|
||
|
struct Zst;
|
||
|
|
||
|
struct Struct {
|
||
|
_a: u32,
|
||
|
}
|
||
|
|
||
|
union Union {
|
||
|
_a: u32,
|
||
|
}
|
||
|
|
||
|
fn check(v: u8) {
|
||
|
assert_eq!(v, 0);
|
||
|
}
|
||
|
|
||
|
pub fn generic<T>()
|
||
|
where
|
||
|
for<'a> T: Fn(&'a isize),
|
||
|
{
|
||
|
let v: Vec<T> = Vec::new();
|
||
|
let _: u8 = discriminant_value(&v);
|
||
|
}
|
||
|
|
||
|
fn main() {
|
||
|
// check that we use `u8` as the discriminant value
|
||
|
// for everything that is not an enum.
|
||
|
check(discriminant_value(&true));
|
||
|
check(discriminant_value(&'a'));
|
||
|
check(discriminant_value(&7));
|
||
|
check(discriminant_value(&7.0));
|
||
|
check(discriminant_value(&Zst));
|
||
|
check(discriminant_value(&Struct { _a: 7 }));
|
||
|
check(discriminant_value(&Union { _a: 7 }));
|
||
|
check(discriminant_value(&[7, 77]));
|
||
|
check(discriminant_value(&(7 as *const ())));
|
||
|
check(discriminant_value(&(7 as *mut ())));
|
||
|
check(discriminant_value(&&7));
|
||
|
check(discriminant_value(&&mut 7));
|
||
|
check(discriminant_value(&check));
|
||
|
let fn_ptr: fn(u8) = check;
|
||
|
check(discriminant_value(&fn_ptr));
|
||
|
let hrtb: for<'a> fn(&'a str) -> &'a str = |x| x;
|
||
|
check(discriminant_value(&hrtb));
|
||
|
check(discriminant_value(&(7, 77, 777)));
|
||
|
}
|