Skip to content

Commit 166b220

Browse files
committed
Fix mutable_borrow_reservation_conflict warnings
rust-lang/rust#59159
1 parent a5c105b commit 166b220

File tree

2 files changed

+62
-52
lines changed

2 files changed

+62
-52
lines changed

src/frontend/mod.rs

+58-48
Original file line numberDiff line numberDiff line change
@@ -583,58 +583,68 @@ fn fold_constants(
583583
Value::String(_) |
584584
Value::Function(_) => None,
585585

586-
Value::AddInt(left, right) => fold_binary(block, definitions, values, functions, *left, *right, |(_, left_value), (_, right_value)| {
587-
match (left_value, right_value) {
588-
(Value::Int(left), Value::Int(right)) => Some(Value::Int(left + right)),
589-
(Value::Int(left), _) if left.is_zero() => Some(right_value.clone()),
590-
(_, Value::Int(right)) if right.is_zero() => Some(left_value.clone()),
591-
_ => None,
592-
}
593-
}),
594-
595-
Value::SubInt(left, right) => fold_binary(block, definitions, values, functions, *left, *right, |(left, left_value), (right, right_value)| {
596-
if left == right {
597-
Some(Value::Int(BigInt::from(0)))
598-
} else {
586+
&Value::AddInt(left, right) => {
587+
fold_binary(block, definitions, values, functions, left, right, |(_, left_value), (_, right_value)| {
599588
match (left_value, right_value) {
600-
(Value::Int(left), Value::Int(right)) => Some(Value::Int(left - right)),
589+
(Value::Int(left), Value::Int(right)) => Some(Value::Int(left + right)),
590+
(Value::Int(left), _) if left.is_zero() => Some(right_value.clone()),
601591
(_, Value::Int(right)) if right.is_zero() => Some(left_value.clone()),
602592
_ => None,
603593
}
604-
}
605-
}),
606-
607-
Value::MulInt(left, right) => fold_binary(block, definitions, values, functions, *left, *right, |(_, left_value), (_, right_value)| {
608-
match (left_value, right_value) {
609-
(Value::Int(left), Value::Int(right)) => Some(Value::Int(left * right)),
610-
(Value::Int(left), _) if left.is_zero() => Some(Value::Int(BigInt::from(0))),
611-
(_, Value::Int(right)) if right.is_zero() => Some(Value::Int(BigInt::from(0))),
612-
(Value::Int(left), _) if left.is_one() => Some(right_value.clone()),
613-
(_, Value::Int(right)) if right.is_one() => Some(left_value.clone()),
614-
_ => None,
615-
}
616-
}),
617-
618-
Value::DivInt(left, right) => fold_binary(block, definitions, values, functions, *left, *right, |(_, left_value), (_, right_value)| {
619-
match (left_value, right_value) {
620-
(Value::Int(left), Value::Int(right)) => Some(Value::Int(left / right)),
621-
(Value::Int(left), _) if left.is_zero() => Some(Value::Int(BigInt::from(0))),
622-
(_, Value::Int(right)) if right.is_one() => Some(left_value.clone()),
623-
_ => None,
624-
}
625-
}),
626-
627-
Value::AddString(left, right) => fold_binary(block, definitions, values, functions, *left, *right, |(_, left_value), (_, right_value)| {
628-
match (left_value, right_value) {
629-
(Value::String(left), Value::String(right)) => {
630-
let mut result = String::with_capacity(left.len() + right.len());
631-
result.push_str(&left);
632-
result.push_str(&right);
633-
Some(Value::String(Rc::new(result)))
634-
},
635-
_ => None,
636-
}
637-
}),
594+
})
595+
},
596+
597+
&Value::SubInt(left, right) => {
598+
fold_binary(block, definitions, values, functions, left, right, |(left, left_value), (right, right_value)| {
599+
if left == right {
600+
Some(Value::Int(BigInt::from(0)))
601+
} else {
602+
match (left_value, right_value) {
603+
(Value::Int(left), Value::Int(right)) => Some(Value::Int(left - right)),
604+
(_, Value::Int(right)) if right.is_zero() => Some(left_value.clone()),
605+
_ => None,
606+
}
607+
}
608+
})
609+
},
610+
611+
&Value::MulInt(left, right) => {
612+
fold_binary(block, definitions, values, functions, left, right, |(_, left_value), (_, right_value)| {
613+
match (left_value, right_value) {
614+
(Value::Int(left), Value::Int(right)) => Some(Value::Int(left * right)),
615+
(Value::Int(left), _) if left.is_zero() => Some(Value::Int(BigInt::from(0))),
616+
(_, Value::Int(right)) if right.is_zero() => Some(Value::Int(BigInt::from(0))),
617+
(Value::Int(left), _) if left.is_one() => Some(right_value.clone()),
618+
(_, Value::Int(right)) if right.is_one() => Some(left_value.clone()),
619+
_ => None,
620+
}
621+
})
622+
},
623+
624+
&Value::DivInt(left, right) => {
625+
fold_binary(block, definitions, values, functions, left, right, |(_, left_value), (_, right_value)| {
626+
match (left_value, right_value) {
627+
(Value::Int(left), Value::Int(right)) => Some(Value::Int(left / right)),
628+
(Value::Int(left), _) if left.is_zero() => Some(Value::Int(BigInt::from(0))),
629+
(_, Value::Int(right)) if right.is_one() => Some(left_value.clone()),
630+
_ => None,
631+
}
632+
})
633+
},
634+
635+
&Value::AddString(left, right) => {
636+
fold_binary(block, definitions, values, functions, left, right, |(_, left_value), (_, right_value)| {
637+
match (left_value, right_value) {
638+
(Value::String(left), Value::String(right)) => {
639+
let mut result = String::with_capacity(left.len() + right.len());
640+
result.push_str(&left);
641+
result.push_str(&right);
642+
Some(Value::String(Rc::new(result)))
643+
},
644+
_ => None,
645+
}
646+
})
647+
},
638648

639649
Value::Call(function, arguments) => fold_call(*function, arguments.to_vec(), values, functions),
640650

src/riscv_backend/mod.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -676,8 +676,8 @@ impl<'a> Backend<'a> {
676676
let (register, source, previous_user) = self.registers.allocate(value_id, target, &*self.no_spill)?;
677677
if let Some(previous_user) = previous_user {
678678
if previous_user != value_id {
679-
if let Some(address) = self.value_addresses.get(&previous_user) {
680-
self.store_u32(register, *address)?;
679+
if let Some(&address) = self.value_addresses.get(&previous_user) {
680+
self.store_u32(register, address)?;
681681
}
682682
}
683683
}
@@ -688,8 +688,8 @@ impl<'a> Backend<'a> {
688688
addi(register, source, 0)?,
689689
])?;
690690
}
691-
} else if let Some(address) = self.value_addresses.get(&value_id) {
692-
self.load_u32(register, *address)?;
691+
} else if let Some(&address) = self.value_addresses.get(&value_id) {
692+
self.load_u32(register, address)?;
693693
} else if self.enable_immediate_integers {
694694
if let Value::Int(_) | Value::Function(_) = &self.module.values[value_id] {
695695
self.generate_immediate(register, value_id)?;

0 commit comments

Comments
 (0)