28 lines
739 B
Rust
28 lines
739 B
Rust
|
//@ compile-flags: -O -Zmerge-functions=disabled
|
||
|
//! Test for <https://github.com/rust-lang/rust/issues/108395>. Check that
|
||
|
//! matching on two bools with wildcards does not produce branches.
|
||
|
#![crate_type = "lib"]
|
||
|
|
||
|
// CHECK-LABEL: @wildcard(
|
||
|
#[no_mangle]
|
||
|
pub fn wildcard(a: u16, b: u16, v: u16) -> u16 {
|
||
|
// CHECK-NOT: br
|
||
|
match (a == v, b == v) {
|
||
|
(true, false) => 0,
|
||
|
(false, true) => u16::MAX,
|
||
|
_ => 1 << 15, // half
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// CHECK-LABEL: @exhaustive(
|
||
|
#[no_mangle]
|
||
|
pub fn exhaustive(a: u16, b: u16, v: u16) -> u16 {
|
||
|
// CHECK-NOT: br
|
||
|
match (a == v, b == v) {
|
||
|
(true, false) => 0,
|
||
|
(false, true) => u16::MAX,
|
||
|
(true, true) => 1 << 15,
|
||
|
(false, false) => 1 << 15,
|
||
|
}
|
||
|
}
|