@@ -771,16 +771,15 @@ impl<'a, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M
771
771
Cast ( kind, ref operand, cast_ty) => {
772
772
debug_assert_eq ! ( self . monomorphize( cast_ty, self . substs( ) ) , dest_ty) ;
773
773
use rustc:: mir:: CastKind :: * ;
774
+ let src = self . eval_operand ( operand) ?;
774
775
match kind {
775
776
Unsize => {
776
- let src = self . eval_operand ( operand) ?;
777
777
let src_layout = self . layout_of ( src. ty ) ?;
778
778
let dst_layout = self . layout_of ( dest_ty) ?;
779
779
self . unsize_into ( src. value , src_layout, dest, dst_layout) ?;
780
780
}
781
781
782
782
Misc => {
783
- let src = self . eval_operand ( operand) ?;
784
783
if self . type_is_fat_ptr ( src. ty ) {
785
784
match ( src. value , self . type_is_fat_ptr ( dest_ty) ) {
786
785
( Value :: ByRef { .. } , _) |
@@ -840,7 +839,7 @@ impl<'a, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M
840
839
}
841
840
842
841
ReifyFnPointer => {
843
- match self . eval_operand ( operand ) ? . ty . sty {
842
+ match src . ty . sty {
844
843
ty:: TyFnDef ( def_id, substs) => {
845
844
if self . tcx . has_attr ( def_id, "rustc_args_required_const" ) {
846
845
bug ! ( "reifying a fn ptr that requires \
@@ -866,7 +865,7 @@ impl<'a, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M
866
865
UnsafeFnPointer => {
867
866
match dest_ty. sty {
868
867
ty:: TyFnPtr ( _) => {
869
- let mut src = self . eval_operand ( operand ) ? ;
868
+ let mut src = src ;
870
869
src. ty = dest_ty;
871
870
self . write_value ( src, dest) ?;
872
871
}
@@ -875,7 +874,7 @@ impl<'a, 'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M
875
874
}
876
875
877
876
ClosureFnPointer => {
878
- match self . eval_operand ( operand ) ? . ty . sty {
877
+ match src . ty . sty {
879
878
ty:: TyClosure ( def_id, substs) => {
880
879
let substs = self . tcx . subst_and_normalize_erasing_regions (
881
880
self . substs ( ) ,
0 commit comments