Test {
span: match_pair.pattern.span,
kind: TestKind::Range {
- lo: Literal::Value { value: lo },
- hi: Literal::Value { value: hi },
+ lo,
+ hi,
ty: match_pair.pattern.ty.clone(),
end,
},
match *match_pair.pattern.kind {
PatternKind::Constant { value } => {
+ let switch_ty = ty::ParamEnv::empty().and(switch_ty);
indices.entry(value)
.or_insert_with(|| {
- options.push(value.unwrap_bits(switch_ty));
+ options.push(value.unwrap_bits(self.hir.tcx(), switch_ty));
options.len() - 1
});
true
pub fn add_variants_to_switch<'pat>(&mut self,
test_place: &Place<'tcx>,
candidate: &Candidate<'pat, 'tcx>,
- variants: &mut BitVector)
+ variants: &mut BitVector<usize>)
-> bool
{
let match_pair = match candidate.match_pairs.iter().find(|mp| mp.place == *test_place) {
TestKind::Eq { value, mut ty } => {
let mut val = Operand::Copy(place.clone());
- let mut expect = self.literal_operand(test.span, ty, Literal::Value {
- value
- });
+ let mut expect = self.literal_operand(test.span, ty, value);
// Use PartialEq::eq instead of BinOp::Eq
// (the binop can only handle primitives)
let fail = self.cfg.start_new_block();
let array = self.literal_operand(
test.span,
value.ty,
- Literal::Value {
- value
- },
+ value,
);
let slice = self.temp(ty, test.span);
bindings: candidate.bindings.clone(),
guard: candidate.guard.clone(),
arm_index: candidate.arm_index,
+ pat_index: candidate.pat_index,
pre_binding_block: candidate.pre_binding_block,
next_candidate_pre_binding_block: candidate.next_candidate_pre_binding_block,
}
bindings: candidate.bindings.clone(),
guard: candidate.guard.clone(),
arm_index: candidate.arm_index,
+ pat_index: candidate.pat_index,
pre_binding_block: candidate.pre_binding_block,
next_candidate_pre_binding_block: candidate.next_candidate_pre_binding_block,
}