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
|
|
|
|
2018-12-16 22:21:47 -05:00
|
|
|
enum NonNullary {
|
|
|
|
|
Nullary,
|
|
|
|
|
Other(isize),
|
2012-01-10 14:55:54 -07:00
|
|
|
}
|
|
|
|
|
|
2020-06-14 21:36:25 -07:00
|
|
|
impl From<NonNullary> for isize {
|
|
|
|
|
fn from(val: NonNullary) -> isize {
|
|
|
|
|
match val {
|
|
|
|
|
NonNullary::Nullary => 0,
|
|
|
|
|
NonNullary::Other(i) => i,
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2012-01-10 14:55:54 -07:00
|
|
|
fn main() {
|
2018-12-16 22:21:47 -05:00
|
|
|
let v = NonNullary::Nullary;
|
2025-07-01 20:20:14 +05:00
|
|
|
let val = v as isize;
|
|
|
|
|
//~^ ERROR non-primitive cast: `NonNullary` as `isize` [E0605]
|
|
|
|
|
//~| HELP consider using the `From` trait instead
|
2012-01-10 14:55:54 -07:00
|
|
|
}
|