diff options
| author | Erik Desjardins <erikdesjardins@users.noreply.github.com> | 2024-02-27 23:14:36 -0500 |
|---|---|---|
| committer | Erik Desjardins <erikdesjardins@users.noreply.github.com> | 2024-02-27 23:14:36 -0500 |
| commit | 401651015d837ebfe55928692a84de37ec8a3a4b (patch) | |
| tree | 4f256b411849c30bfec52735d291448797f19a2d /tests/codegen | |
| parent | c1017d48281c0fad0a93e36315db357d3a8b5f6a (diff) | |
| download | rust-401651015d837ebfe55928692a84de37ec8a3a4b.tar.gz rust-401651015d837ebfe55928692a84de37ec8a3a4b.zip | |
test merging of multiple match branches that access fields of the same offset
Diffstat (limited to 'tests/codegen')
| -rw-r--r-- | tests/codegen/issues/issue-121719-common-field-offset.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/tests/codegen/issues/issue-121719-common-field-offset.rs b/tests/codegen/issues/issue-121719-common-field-offset.rs new file mode 100644 index 00000000000..11a8aa8dcd1 --- /dev/null +++ b/tests/codegen/issues/issue-121719-common-field-offset.rs @@ -0,0 +1,44 @@ +//! 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, + } +} |
