about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorChristian Poveda <cpovedar@fnal.gov>2019-06-29 07:59:45 -0500
committerChristian Poveda <cpovedar@fnal.gov>2019-06-29 07:59:45 -0500
commit95bc72052c65e22cbf23f80bfa314528abcb981b (patch)
treed4e990ee8ac284f2cd2803ef083b99972b7f2a5d /src
parent7f1e160e02112d4d23a72e52b2ab23860e6a956f (diff)
downloadrust-95bc72052c65e22cbf23f80bfa314528abcb981b.tar.gz
rust-95bc72052c65e22cbf23f80bfa314528abcb981b.zip
Use pointer size as the source size
Diffstat (limited to 'src')
-rw-r--r--src/librustc_mir/interpret/cast.rs19
1 files changed, 3 insertions, 16 deletions
diff --git a/src/librustc_mir/interpret/cast.rs b/src/librustc_mir/interpret/cast.rs
index e8bca0c7123..73ef0bd6dac 100644
--- a/src/librustc_mir/interpret/cast.rs
+++ b/src/librustc_mir/interpret/cast.rs
@@ -244,37 +244,24 @@ impl<'mir, 'tcx, M: Machine<'mir, 'tcx>> InterpretCx<'mir, 'tcx, M> {
     ) -> InterpResult<'tcx, Scalar<M::PointerTag>> {
         use rustc::ty::TyKind::*;
 
-        fn int_size<'tcx>(layout: TyLayout<'tcx>) -> Option<usize> {
-            match layout.ty.sty {
-                Int(i) => i.bit_width(),
-                Uint(i) => i.bit_width(),
-                _ => bug!("Not an integer"),
-            }
-        }
-
         match dest_layout.ty.sty {
             // Casting to a reference or fn pointer is not permitted by rustc,
             // no need to support it here.
             RawPtr(_) => Ok(ptr.into()),
             Int(IntTy::Isize) | Uint(UintTy::Usize) => {
-                let size = self.memory.pointer_size();
-                
-                if let Ok(bits) = self.force_bits(Scalar::Ptr(ptr), size) {
+                if let Ok(bits) = self.force_bits(Scalar::Ptr(ptr), self.memory.pointer_size()) {
                     self.cast_from_int(bits, src_layout, dest_layout)
                 } else {
                     Ok(ptr.into())
                 }
             }
             Int(_) | Uint(_) => {
-                let size = Size::from_bits(int_size(dest_layout).unwrap() as u64);
-                
-                if let Ok(bits) = self.force_bits(Scalar::Ptr(ptr), size) {
+                if let Ok(bits) = self.force_bits(Scalar::Ptr(ptr), self.memory.pointer_size()) {
                     self.cast_from_int(bits, src_layout, dest_layout)
                 } else {
                     err!(ReadPointerAsBytes)
                 }
-            },
-            // Casting to any other type is not implemented
+            }
             _ => return err!(Unimplemented(format!("ptr to {:?} cast", dest_layout.ty))),
         }
     }