@@ -82,17 +82,19 @@ pub fn binary_op<'tcx>(bin_op: mir::BinOp, left: PrimVal, right: PrimVal) -> Eva
82
82
U64 ( _) => 6 ,
83
83
_ => unreachable ! ( ) ,
84
84
} ;
85
+ let mask = ( 1 << mask_bits) - 1 ;
85
86
let r = match right {
86
- I8 ( i) => ( i & ( ( 1 << mask_bits ) - 1 ) ) as u32 ,
87
- I16 ( i) => ( i & ( ( 1 << mask_bits ) - 1 ) ) as u32 ,
88
- I32 ( i) => ( i & ( ( 1 << mask_bits ) - 1 ) ) as u32 ,
89
- I64 ( i) => ( i & ( ( 1 << mask_bits ) - 1 ) ) as u32 ,
90
- U8 ( i) => ( i & ( ( 1 << mask_bits ) - 1 ) ) as u32 ,
91
- U16 ( i) => ( i & ( ( 1 << mask_bits ) - 1 ) ) as u32 ,
92
- U32 ( i) => ( i & ( ( 1 << mask_bits ) - 1 ) ) as u32 ,
93
- U64 ( i) => ( i & ( ( 1 << mask_bits ) - 1 ) ) as u32 ,
87
+ I8 ( i) => i as u8 & mask ,
88
+ I16 ( i) => i as u8 & mask ,
89
+ I32 ( i) => i as u8 & mask ,
90
+ I64 ( i) => i as u8 & mask ,
91
+ U8 ( i) => i as u8 & mask ,
92
+ U16 ( i) => i as u8 & mask ,
93
+ U32 ( i) => i as u8 & mask ,
94
+ U64 ( i) => i as u8 & mask ,
94
95
_ => panic ! ( "bad MIR: bitshift rhs is not integral" ) ,
95
96
} ;
97
+ let r = r as u32 ;
96
98
macro_rules! shift {
97
99
( $v: ident, $l: ident, $r: ident) => ( {
98
100
match bin_op {
0 commit comments