1
Fork 0

Auto merge of #79922 - tmiasko:lower-discriminant, r=nagisa

Lower `discriminant_value` intrinsic

This allows const propagation to evaluate comparisons involving
field-less enums using derived implementations of `PartialEq` (after
inlining `eq`).
This commit is contained in:
bors 2020-12-15 01:56:25 +00:00
commit 5d77fc8d0d
5 changed files with 191 additions and 6 deletions

View file

@ -83,6 +83,21 @@ impl<'tcx> MirPass<'tcx> for LowerIntrinsics {
terminator.kind = TerminatorKind::Goto { target };
}
}
sym::discriminant_value => {
if let (Some((destination, target)), Some(arg)) =
(*destination, args[0].place())
{
let arg = tcx.mk_place_deref(arg);
block.statements.push(Statement {
source_info: terminator.source_info,
kind: StatementKind::Assign(box (
destination,
Rvalue::Discriminant(arg),
)),
});
terminator.kind = TerminatorKind::Goto { target };
}
}
_ => {}
}
}