diff options
| author | Ralf Jung <post@ralfj.de> | 2020-05-21 16:30:27 +0200 |
|---|---|---|
| committer | Ralf Jung <post@ralfj.de> | 2020-05-21 16:49:11 +0200 |
| commit | 94aa02855defad20fe63d46a5df9506e82b78ff3 (patch) | |
| tree | d1298341b77d25732884160cfd093b0dcfc8decb | |
| parent | 963bf528292d8f97104515e32908e30c2467b6a8 (diff) | |
| download | rust-94aa02855defad20fe63d46a5df9506e82b78ff3.tar.gz rust-94aa02855defad20fe63d46a5df9506e82b78ff3.zip | |
fix discriminant sign extension
| -rw-r--r-- | src/librustc_mir/interpret/intrinsics.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/librustc_mir/interpret/intrinsics.rs b/src/librustc_mir/interpret/intrinsics.rs index 42b969c9991..fc4be82ad90 100644 --- a/src/librustc_mir/interpret/intrinsics.rs +++ b/src/librustc_mir/interpret/intrinsics.rs @@ -219,7 +219,10 @@ impl<'mir, 'tcx: 'mir, M: Machine<'mir, 'tcx>> InterpCx<'mir, 'tcx, M> { let place = self.deref_operand(args[0])?; let discr_val = self.read_discriminant(place.into())?.0; let scalar = match dest.layout.ty.kind { - ty::Int(_) => Scalar::from_int(discr_val as i128, dest.layout.size), + ty::Int(_) => Scalar::from_int( + self.sign_extend(discr_val, dest.layout) as i128, + dest.layout.size, + ), ty::Uint(_) => Scalar::from_uint(discr_val, dest.layout.size), _ => bug!("invalid `discriminant_value` return layout: {:?}", dest.layout), }; |
