Skip to content

Commit

Permalink
Auto merge of #30733 - ubsan:wrapping_op_assign, r=eddyb
Browse files Browse the repository at this point in the history
Fix a breaking change in #30523

While this does fix a breaking change, it is also, technically, a
[breaking-change] to go back to our original way
  • Loading branch information
bors committed Jan 6, 2016
2 parents d5ac1a1 + 14e1e2a commit 21b025f
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 49 deletions.
30 changes: 15 additions & 15 deletions src/libcore/num/wrapping.rs
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ macro_rules! sh_impl_signed {
#[inline(always)]
fn shl(self, other: $f) -> Wrapping<$t> {
if other < 0 {
Wrapping(self.0 >> (-other & self::shift_max::$t as $f))
Wrapping(self.0.wrapping_shr((-other & self::shift_max::$t as $f) as u32))
} else {
Wrapping(self.0 << (other & self::shift_max::$t as $f))
Wrapping(self.0.wrapping_shl((other & self::shift_max::$t as $f) as u32))
}
}
}
Expand All @@ -64,9 +64,9 @@ macro_rules! sh_impl_signed {
#[inline(always)]
fn shr(self, other: $f) -> Wrapping<$t> {
if other < 0 {
Wrapping(self.0 << (-other & self::shift_max::$t as $f))
Wrapping(self.0.wrapping_shl((-other & self::shift_max::$t as $f) as u32))
} else {
Wrapping(self.0 >> (other & self::shift_max::$t as $f))
Wrapping(self.0.wrapping_shr((other & self::shift_max::$t as $f) as u32))
}
}
}
Expand All @@ -89,7 +89,7 @@ macro_rules! sh_impl_unsigned {

#[inline(always)]
fn shl(self, other: $f) -> Wrapping<$t> {
Wrapping(self.0 << (other & self::shift_max::$t as $f))
Wrapping(self.0.wrapping_shl((other & self::shift_max::$t as $f) as u32))
}
}

Expand All @@ -107,7 +107,7 @@ macro_rules! sh_impl_unsigned {

#[inline(always)]
fn shr(self, other: $f) -> Wrapping<$t> {
Wrapping(self.0 >> (other & self::shift_max::$t as $f))
Wrapping(self.0.wrapping_shr((other & self::shift_max::$t as $f) as u32))
}
}

Expand All @@ -124,17 +124,17 @@ macro_rules! sh_impl_unsigned {
// FIXME (#23545): uncomment the remaining impls
macro_rules! sh_impl_all {
($($t:ident)*) => ($(
sh_impl_unsigned! { $t, u8 }
sh_impl_unsigned! { $t, u16 }
sh_impl_unsigned! { $t, u32 }
sh_impl_unsigned! { $t, u64 }
//sh_impl_unsigned! { $t, u8 }
//sh_impl_unsigned! { $t, u16 }
//sh_impl_unsigned! { $t, u32 }
//sh_impl_unsigned! { $t, u64 }
sh_impl_unsigned! { $t, usize }

sh_impl_signed! { $t, i8 }
sh_impl_signed! { $t, i16 }
sh_impl_signed! { $t, i32 }
sh_impl_signed! { $t, i64 }
sh_impl_signed! { $t, isize }
//sh_impl_signed! { $t, i8 }
//sh_impl_signed! { $t, i16 }
//sh_impl_signed! { $t, i32 }
//sh_impl_signed! { $t, i64 }
//sh_impl_signed! { $t, isize }
)*)
}

Expand Down
12 changes: 6 additions & 6 deletions src/librand/isaac.rs
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ impl IsaacRng {
const MIDPOINT: usize = RAND_SIZE_USIZE / 2;

macro_rules! ind {
($x:expr) => (self.mem[($x >> 2u32).0 as usize & (RAND_SIZE_USIZE - 1)] )
($x:expr) => (self.mem[($x >> 2).0 as usize & (RAND_SIZE_USIZE - 1)] )
}

let r = [(0, MIDPOINT), (MIDPOINT, 0)];
Expand Down Expand Up @@ -452,7 +452,7 @@ impl Isaac64Rng {
const MP_VEC: [(usize, usize); 2] = [(0, MIDPOINT), (MIDPOINT, 0)];
macro_rules! ind {
($x:expr) => {
*self.mem.get_unchecked((($x >> 3u32).0 as usize) & (RAND_SIZE_64 - 1))
*self.mem.get_unchecked((($x >> 3).0 as usize) & (RAND_SIZE_64 - 1))
}
}

Expand Down Expand Up @@ -495,10 +495,10 @@ impl Isaac64Rng {
}}
}

rngstepp!(0, 21u32);
rngstepn!(1, 5u32);
rngstepp!(2, 12u32);
rngstepn!(3, 33u32);
rngstepp!(0, 21);
rngstepn!(1, 5);
rngstepp!(2, 12);
rngstepn!(3, 33);
}
}

Expand Down
58 changes: 30 additions & 28 deletions src/test/run-pass/num-wrapping.rs
Original file line number Diff line number Diff line change
Expand Up @@ -309,22 +309,23 @@ fn test_sh_ops() {
sh_test!(shl(usize::MAX, -((usize::BITS + 1) as $t)) == usize::MAX / 2);
}
}
sh_test_all!(i8);
sh_test_all!(u8);
sh_test_all!(i16);
sh_test_all!(u16);
sh_test_all!(i32);
sh_test_all!(u32);
sh_test_all!(i64);
sh_test_all!(u64);
sh_test_all!(isize);
// FIXME(#23545): Uncomment the remaining tests
//sh_test_all!(i8);
//sh_test_all!(u8);
//sh_test_all!(i16);
//sh_test_all!(u16);
//sh_test_all!(i32);
//sh_test_all!(u32);
//sh_test_all!(i64);
//sh_test_all!(u64);
//sh_test_all!(isize);
sh_test_all!(usize);

sh_test_negative_all!(i8);
sh_test_negative_all!(i16);
sh_test_negative_all!(i32);
sh_test_negative_all!(i64);
sh_test_negative_all!(isize);
//sh_test_negative_all!(i8);
//sh_test_negative_all!(i16);
//sh_test_negative_all!(i32);
//sh_test_negative_all!(i64);
//sh_test_negative_all!(isize);
}

fn test_sh_op_assigns() {
Expand Down Expand Up @@ -393,20 +394,21 @@ fn test_sh_op_assigns() {
}
}

sh_assign_test_all!(i8);
sh_assign_test_all!(u8);
sh_assign_test_all!(i16);
sh_assign_test_all!(u16);
sh_assign_test_all!(i32);
sh_assign_test_all!(u32);
sh_assign_test_all!(i64);
sh_assign_test_all!(u64);
sh_assign_test_all!(isize);
// FIXME(#23545): Uncomment the remaining tests
//sh_assign_test_all!(i8);
//sh_assign_test_all!(u8);
//sh_assign_test_all!(i16);
//sh_assign_test_all!(u16);
//sh_assign_test_all!(i32);
//sh_assign_test_all!(u32);
//sh_assign_test_all!(i64);
//sh_assign_test_all!(u64);
//sh_assign_test_all!(isize);
sh_assign_test_all!(usize);

sh_assign_test_negative_all!(i8);
sh_assign_test_negative_all!(i16);
sh_assign_test_negative_all!(i32);
sh_assign_test_negative_all!(i64);
sh_assign_test_negative_all!(isize);
//sh_assign_test_negative_all!(i8);
//sh_assign_test_negative_all!(i16);
//sh_assign_test_negative_all!(i32);
//sh_assign_test_negative_all!(i64);
//sh_assign_test_negative_all!(isize);
}

0 comments on commit 21b025f

Please sign in to comment.