diff options
| author | Ralf Jung <post@ralfj.de> | 2020-05-21 21:10:47 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-21 21:10:47 +0200 |
| commit | 74b5c50214c0edd9582d75fa472ed9a7ea25c0e5 (patch) | |
| tree | 428909cba33b2925156df7b9236e15f4dc802789 | |
| parent | fc729d0c60647743306a7cbd1fc4e9a88ccc2fe9 (diff) | |
| parent | 94aa02855defad20fe63d46a5df9506e82b78ff3 (diff) | |
| download | rust-74b5c50214c0edd9582d75fa472ed9a7ea25c0e5.tar.gz rust-74b5c50214c0edd9582d75fa472ed9a7ea25c0e5.zip | |
Rollup merge of #72425 - RalfJung:discr-sign-ext, r=nikomatsakis
fix discriminant_value sign extension Fixes a regression introduced in https://github.com/rust-lang/rust/pull/70705 r? @nikomatsakis Cc @lcnr @oli-obk
| -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), }; |
