ConstProp: Remove const when rvalue check fails.

(cherry picked from commit 9121a41450)
This commit is contained in:
Alona Enraght-Moony
2023-11-28 21:43:23 +00:00
committed by Josh Stone
parent ebd43bdb66
commit cb4f87af34
2 changed files with 7 additions and 3 deletions
@@ -440,6 +440,7 @@ fn check_rvalue(&mut self, rvalue: &Rvalue<'tcx>) -> Option<()> {
// FIXME we need to revisit this for #67176
if rvalue.has_param() {
trace!("skipping, has param");
return None;
}
if !rvalue
@@ -708,7 +709,11 @@ fn visit_projection_elem(
fn visit_assign(&mut self, place: &Place<'tcx>, rvalue: &Rvalue<'tcx>, location: Location) {
self.super_assign(place, rvalue, location);
let Some(()) = self.check_rvalue(rvalue) else { return };
let Some(()) = self.check_rvalue(rvalue) else {
trace!("rvalue check failed, removing const");
Self::remove_const(&mut self.ecx, place.local);
return;
};
match self.ecx.machine.can_const_prop[place.local] {
// Do nothing if the place is indirect.
@@ -12,8 +12,7 @@
StorageLive(_1);
_1 = const 0_usize;
_1 = const _;
- _0 = _1;
+ _0 = const 0_usize;
_0 = _1;
StorageDead(_1);
return;
}