2024-04-20 11:19:34 +00:00
|
|
|
//@ test-mir-pass: EarlyOtherwiseBranch
|
2024-02-21 14:44:48 +00:00
|
|
|
//@ compile-flags: -Zmir-enable-passes=+UnreachableEnumBranching
|
2022-08-21 04:47:53 +00:00
|
|
|
|
|
|
|
// FIXME: This test was broken by the derefer change.
|
2020-08-01 23:47:52 +00:00
|
|
|
|
|
|
|
// example from #68867
|
|
|
|
type CSSFloat = f32;
|
|
|
|
|
|
|
|
pub enum ViewportPercentageLength {
|
|
|
|
Vw(CSSFloat),
|
|
|
|
Vh(CSSFloat),
|
|
|
|
Vmin(CSSFloat),
|
|
|
|
Vmax(CSSFloat),
|
|
|
|
}
|
|
|
|
|
|
|
|
// EMIT_MIR early_otherwise_branch_68867.try_sum.EarlyOtherwiseBranch.diff
|
|
|
|
#[no_mangle]
|
2020-09-20 12:45:08 +00:00
|
|
|
pub extern "C" fn try_sum(
|
|
|
|
x: &ViewportPercentageLength,
|
|
|
|
other: &ViewportPercentageLength,
|
|
|
|
) -> Result<ViewportPercentageLength, ()> {
|
2024-02-22 00:15:42 +00:00
|
|
|
// CHECK-LABEL: fn try_sum(
|
|
|
|
// CHECK: bb0: {
|
|
|
|
// CHECK: [[LOCAL1:_.*]] = discriminant({{.*}});
|
|
|
|
// CHECK-NOT: Ne
|
|
|
|
// CHECK-NOT: discriminant
|
|
|
|
// CHECK: switchInt(move [[LOCAL1]]) -> [
|
|
|
|
// CHECK-NEXT: }
|
2020-08-01 23:47:52 +00:00
|
|
|
use self::ViewportPercentageLength::*;
|
|
|
|
Ok(match (x, other) {
|
|
|
|
(&Vw(one), &Vw(other)) => Vw(one + other),
|
|
|
|
(&Vh(one), &Vh(other)) => Vh(one + other),
|
|
|
|
(&Vmin(one), &Vmin(other)) => Vmin(one + other),
|
|
|
|
(&Vmax(one), &Vmax(other)) => Vmax(one + other),
|
|
|
|
_ => return Err(()),
|
|
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
try_sum(&ViewportPercentageLength::Vw(1.0), &ViewportPercentageLength::Vw(2.0));
|
|
|
|
}
|