Skip to content

Commit a8e3f59

Browse files
committed
Set notrap flag on loads and stores
1 parent 452656b commit a8e3f59

File tree

1 file changed

+13
-9
lines changed

1 file changed

+13
-9
lines changed

src/value_and_place.rs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,9 @@ impl<'tcx> CValue<'tcx> {
140140
}
141141
_ => unreachable!("{:?}", layout.ty),
142142
};
143-
ptr.load(fx, clif_ty, MemFlags::new())
143+
let mut flags = MemFlags::new();
144+
flags.set_notrap();
145+
ptr.load(fx, clif_ty, flags)
144146
}
145147
CValueInner::ByVal(value) => value,
146148
CValueInner::ByRef(_, Some(_)) => bug!("load_scalar for unsized value not allowed"),
@@ -163,8 +165,10 @@ impl<'tcx> CValue<'tcx> {
163165
let b_offset = scalar_pair_calculate_b_offset(fx.tcx, a_scalar, b_scalar);
164166
let clif_ty1 = scalar_to_clif_type(fx.tcx, a_scalar.clone());
165167
let clif_ty2 = scalar_to_clif_type(fx.tcx, b_scalar.clone());
166-
let val1 = ptr.load(fx, clif_ty1, MemFlags::new());
167-
let val2 = ptr.offset(fx, b_offset).load(fx, clif_ty2, MemFlags::new());
168+
let mut flags = MemFlags::new();
169+
flags.set_notrap();
170+
let val1 = ptr.load(fx, clif_ty1, flags);
171+
let val2 = ptr.offset(fx, b_offset).load(fx, clif_ty2, flags);
168172
(val1, val2)
169173
}
170174
CValueInner::ByRef(_, Some(_)) => {
@@ -609,28 +613,28 @@ impl<'tcx> CPlace<'tcx> {
609613
CPlaceInner::Addr(_, Some(_)) => bug!("Can't write value to unsized place {:?}", self),
610614
};
611615

616+
let mut flags = MemFlags::new();
617+
flags.set_notrap();
612618
match from.layout().abi {
613619
// FIXME make Abi::Vector work too
614620
Abi::Scalar(_) => {
615621
let val = from.load_scalar(fx);
616-
to_ptr.store(fx, val, MemFlags::new());
622+
to_ptr.store(fx, val, flags);
617623
return;
618624
}
619625
Abi::ScalarPair(ref a_scalar, ref b_scalar) => {
620626
let (value, extra) = from.load_scalar_pair(fx);
621627
let b_offset = scalar_pair_calculate_b_offset(fx.tcx, a_scalar, b_scalar);
622-
to_ptr.store(fx, value, MemFlags::new());
623-
to_ptr
624-
.offset(fx, b_offset)
625-
.store(fx, extra, MemFlags::new());
628+
to_ptr.store(fx, value, flags);
629+
to_ptr.offset(fx, b_offset).store(fx, extra, flags);
626630
return;
627631
}
628632
_ => {}
629633
}
630634

631635
match from.0 {
632636
CValueInner::ByVal(val) => {
633-
to_ptr.store(fx, val, MemFlags::new());
637+
to_ptr.store(fx, val, flags);
634638
}
635639
CValueInner::ByValPair(_, _) => {
636640
bug!(

0 commit comments

Comments
 (0)