2025-07-01 20:20:14 +05:00
|
|
|
//! This test verifies that a direct non-primitive cast from an enum to an integer type
|
|
|
|
|
//! is correctly disallowed, even when a `From` implementation exists for that enum.
|
|
|
|
|
|
2024-02-16 20:02:50 +00:00
|
|
|
//@ run-rustfix
|
2025-07-01 20:20:14 +05:00
|
|
|
|
2020-06-14 21:36:25 -07:00
|
|
|
#![allow(dead_code, unused_variables)]
|
2025-07-01 20:20:14 +05:00
|
|
|
|
2020-06-14 21:36:25 -07:00
|
|
|
enum NonNullary {
|
|
|
|
|
Nullary,
|
|
|
|
|
Other(isize),
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl From<NonNullary> for isize {
|
|
|
|
|
fn from(val: NonNullary) -> isize {
|
|
|
|
|
match val {
|
|
|
|
|
NonNullary::Nullary => 0,
|
|
|
|
|
NonNullary::Other(i) => i,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
|
let v = NonNullary::Nullary;
|
2025-07-01 20:20:14 +05:00
|
|
|
let val = isize::from(v);
|
|
|
|
|
//~^ ERROR non-primitive cast: `NonNullary` as `isize` [E0605]
|
|
|
|
|
//~| HELP consider using the `From` trait instead
|
2020-06-14 21:36:25 -07:00
|
|
|
}
|