| // { dg-output "Foo::A\r*\nwildcard\r*\nwildcard\r*\nFoo::D 20 80\r*\n" } |
| extern "C" { |
| fn printf(s: *const i8, ...); |
| } |
| |
| enum Foo { |
| A, |
| B, |
| C(char), |
| D { x: i32, y: i32 }, |
| } |
| |
| fn inspect(f: Foo) { |
| match f { |
| Foo::A => unsafe { |
| let a = "Foo::A\n\0"; |
| let b = a as *const str; |
| let c = b as *const i8; |
| |
| printf(c); |
| }, |
| Foo::D { x, y } => unsafe { |
| let a = "Foo::D %i %i\n\0"; |
| let b = a as *const str; |
| let c = b as *const i8; |
| |
| printf(c, x, y); |
| }, |
| _ => unsafe { |
| let a = "wildcard\n\0"; |
| let b = a as *const str; |
| let c = b as *const i8; |
| |
| printf(c); |
| }, |
| } |
| } |
| |
| fn main() -> i32 { |
| let a = Foo::A; |
| let b = Foo::B; |
| let c = Foo::C('x'); |
| let d = Foo::D { x: 20, y: 80 }; |
| |
| inspect(a); |
| inspect(b); |
| inspect(c); |
| inspect(d); |
| |
| 0 |
| } |