diff --git a/src/libcore/num/mod.rs b/src/libcore/num/mod.rs index 89e6330f07b09..1b0dd73d10604 100644 --- a/src/libcore/num/mod.rs +++ b/src/libcore/num/mod.rs @@ -506,7 +506,7 @@ macro_rules! int_impl { #[inline] pub fn abs(self) -> $T { if self.is_negative() { - self.wrapping_neg() + !self + 1 // wrapping_neg } else { self } diff --git a/src/libserialize/json.rs b/src/libserialize/json.rs index f17ce14f9eff9..f57b852ea53d2 100644 --- a/src/libserialize/json.rs +++ b/src/libserialize/json.rs @@ -1538,7 +1538,7 @@ impl> Parser { F64Value(res) } else { if neg { - let res = (res as i64).wrapping_neg(); + let res = !(res as i64) + 1; // wrapping_neg // Make sure we didn't underflow. if res > 0 {