From 94aa02855defad20fe63d46a5df9506e82b78ff3 Mon Sep 17 00:00:00 2001 From: Ralf Jung Date: Thu, 21 May 2020 16:30:27 +0200 Subject: [PATCH] fix discriminant sign extension --- src/librustc_mir/interpret/intrinsics.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/librustc_mir/interpret/intrinsics.rs b/src/librustc_mir/interpret/intrinsics.rs index 42b969c99917f..fc4be82ad90ad 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), };