@@ -1367,16 +1367,17 @@ impl<'body, 'tcx> VnState<'body, 'tcx> {
13671367
13681368 fn simplify_cast (
13691369 & mut self ,
1370- kind : & mut CastKind ,
1371- operand : & mut Operand < ' tcx > ,
1370+ initial_kind : & mut CastKind ,
1371+ initial_operand : & mut Operand < ' tcx > ,
13721372 to : Ty < ' tcx > ,
13731373 location : Location ,
13741374 ) -> Option < VnIndex > {
13751375 use CastKind :: * ;
13761376 use rustc_middle:: ty:: adjustment:: PointerCoercion :: * ;
13771377
1378- let mut from = operand. ty ( self . local_decls , self . tcx ) ;
1379- let mut value = self . simplify_operand ( operand, location) ?;
1378+ let mut from = initial_operand. ty ( self . local_decls , self . tcx ) ;
1379+ let mut kind = * initial_kind;
1380+ let mut value = self . simplify_operand ( initial_operand, location) ?;
13801381 if from == to {
13811382 return Some ( value) ;
13821383 }
@@ -1400,7 +1401,7 @@ impl<'body, 'tcx> VnState<'body, 'tcx> {
14001401 && to. is_unsafe_ptr ( )
14011402 && self . pointers_have_same_metadata ( from, to)
14021403 {
1403- * kind = PtrToPtr ;
1404+ kind = PtrToPtr ;
14041405 was_updated_this_iteration = true ;
14051406 }
14061407
@@ -1443,7 +1444,7 @@ impl<'body, 'tcx> VnState<'body, 'tcx> {
14431444 to : inner_to,
14441445 } = * self . get ( value)
14451446 {
1446- let new_kind = match ( inner_kind, * kind) {
1447+ let new_kind = match ( inner_kind, kind) {
14471448 // Even if there's a narrowing cast in here that's fine, because
14481449 // things like `*mut [i32] -> *mut i32 -> *const i32` and
14491450 // `*mut [i32] -> *const [i32] -> *const i32` can skip the middle in MIR.
@@ -1471,7 +1472,7 @@ impl<'body, 'tcx> VnState<'body, 'tcx> {
14711472 _ => None ,
14721473 } ;
14731474 if let Some ( new_kind) = new_kind {
1474- * kind = new_kind;
1475+ kind = new_kind;
14751476 from = inner_from;
14761477 value = inner_value;
14771478 was_updated_this_iteration = true ;
@@ -1489,10 +1490,11 @@ impl<'body, 'tcx> VnState<'body, 'tcx> {
14891490 }
14901491
14911492 if was_ever_updated && let Some ( op) = self . try_as_operand ( value, location) {
1492- * operand = op;
1493+ * initial_operand = op;
1494+ * initial_kind = kind;
14931495 }
14941496
1495- Some ( self . insert ( Value :: Cast { kind : * kind , value, from, to } ) )
1497+ Some ( self . insert ( Value :: Cast { kind, value, from, to } ) )
14961498 }
14971499
14981500 fn simplify_len ( & mut self , place : & mut Place < ' tcx > , location : Location ) -> Option < VnIndex > {
0 commit comments