| //! This test checks that match branches which all access a field |
| //! at the same offset are merged together. |
| //! |
| //@ compile-flags: -O |
| #![crate_type = "lib"] |
| |
| #[repr(C)] |
| pub struct A { |
| x: f64, |
| y: u64, |
| } |
| #[repr(C)] |
| pub struct B { |
| x: f64, |
| y: u32, |
| } |
| #[repr(C)] |
| pub struct C { |
| x: f64, |
| y: u16, |
| } |
| #[repr(C)] |
| pub struct D { |
| x: f64, |
| y: u8, |
| } |
| |
| pub enum E { |
| A(A), |
| B(B), |
| C(C), |
| D(D), |
| } |
| |
| // CHECK-LABEL: @match_on_e |
| #[no_mangle] |
| pub fn match_on_e(e: &E) -> &f64 { |
| // CHECK: start: |
| // CHECK-NEXT: getelementptr |
| // CHECK-NEXT: ret |
| match e { |
| E::A(A { x, .. }) | E::B(B { x, .. }) | E::C(C { x, .. }) | E::D(D { x, .. }) => x, |
| } |
| } |