File tree 1 file changed +8
-2
lines changed
compiler/rustc_mir_transform/src
1 file changed +8
-2
lines changed Original file line number Diff line number Diff line change @@ -1779,8 +1779,14 @@ impl<'tcx> MutVisitor<'tcx> for VnState<'_, 'tcx> {
1779
1779
let opaque = self . new_opaque ( ) ;
1780
1780
self . assign ( local, opaque) ;
1781
1781
}
1782
- // Function calls maybe invalidate nested deref, and non-local assignments maybe invalidate deref.
1783
- // Currently, no distinction is made between these two cases.
1782
+ }
1783
+ // Function calls and ASM may invalidate (nested) derefs. We must handle them carefully.
1784
+ // Currently, only preserving derefs for trivial terminators like SwitchInt and Goto.
1785
+ let safe_to_preserve_derefs = matches ! (
1786
+ terminator. kind,
1787
+ TerminatorKind :: SwitchInt { .. } | TerminatorKind :: Goto { .. }
1788
+ ) ;
1789
+ if !safe_to_preserve_derefs {
1784
1790
self . invalidate_derefs ( ) ;
1785
1791
}
1786
1792
self . super_terminator ( terminator, location) ;
You can’t perform that action at this time.
0 commit comments