about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbjorn3 <bjorn3@users.noreply.github.com>2020-08-30 11:14:11 +0200
committerbjorn3 <bjorn3@users.noreply.github.com>2020-08-30 13:15:08 +0200
commita8e3f592c9ccbc49bf95c33dec8c2d4852a3faee (patch)
tree0da7f457f51e0a57f303265f2fc79c36ee863f7f
parent452656b782dd66108c490beffe67902e3b4fdb74 (diff)
downloadrust-a8e3f592c9ccbc49bf95c33dec8c2d4852a3faee.tar.gz
rust-a8e3f592c9ccbc49bf95c33dec8c2d4852a3faee.zip
Set notrap flag on loads and stores
-rw-r--r--src/value_and_place.rs22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/value_and_place.rs b/src/value_and_place.rs
index 847c5fc7870..3e0d84387f3 100644
--- a/src/value_and_place.rs
+++ b/src/value_and_place.rs
@@ -140,7 +140,9 @@ impl<'tcx> CValue<'tcx> {
                     }
                     _ => unreachable!("{:?}", layout.ty),
                 };
-                ptr.load(fx, clif_ty, MemFlags::new())
+                let mut flags = MemFlags::new();
+                flags.set_notrap();
+                ptr.load(fx, clif_ty, flags)
             }
             CValueInner::ByVal(value) => value,
             CValueInner::ByRef(_, Some(_)) => bug!("load_scalar for unsized value not allowed"),
@@ -163,8 +165,10 @@ impl<'tcx> CValue<'tcx> {
                 let b_offset = scalar_pair_calculate_b_offset(fx.tcx, a_scalar, b_scalar);
                 let clif_ty1 = scalar_to_clif_type(fx.tcx, a_scalar.clone());
                 let clif_ty2 = scalar_to_clif_type(fx.tcx, b_scalar.clone());
-                let val1 = ptr.load(fx, clif_ty1, MemFlags::new());
-                let val2 = ptr.offset(fx, b_offset).load(fx, clif_ty2, MemFlags::new());
+                let mut flags = MemFlags::new();
+                flags.set_notrap();
+                let val1 = ptr.load(fx, clif_ty1, flags);
+                let val2 = ptr.offset(fx, b_offset).load(fx, clif_ty2, flags);
                 (val1, val2)
             }
             CValueInner::ByRef(_, Some(_)) => {
@@ -609,20 +613,20 @@ impl<'tcx> CPlace<'tcx> {
             CPlaceInner::Addr(_, Some(_)) => bug!("Can't write value to unsized place {:?}", self),
         };
 
+        let mut flags = MemFlags::new();
+        flags.set_notrap();
         match from.layout().abi {
             // FIXME make Abi::Vector work too
             Abi::Scalar(_) => {
                 let val = from.load_scalar(fx);
-                to_ptr.store(fx, val, MemFlags::new());
+                to_ptr.store(fx, val, flags);
                 return;
             }
             Abi::ScalarPair(ref a_scalar, ref b_scalar) => {
                 let (value, extra) = from.load_scalar_pair(fx);
                 let b_offset = scalar_pair_calculate_b_offset(fx.tcx, a_scalar, b_scalar);
-                to_ptr.store(fx, value, MemFlags::new());
-                to_ptr
-                    .offset(fx, b_offset)
-                    .store(fx, extra, MemFlags::new());
+                to_ptr.store(fx, value, flags);
+                to_ptr.offset(fx, b_offset).store(fx, extra, flags);
                 return;
             }
             _ => {}
@@ -630,7 +634,7 @@ impl<'tcx> CPlace<'tcx> {
 
         match from.0 {
             CValueInner::ByVal(val) => {
-                to_ptr.store(fx, val, MemFlags::new());
+                to_ptr.store(fx, val, flags);
             }
             CValueInner::ByValPair(_, _) => {
                 bug!(