about summary refs log tree commit diff
path: root/src/librustc_codegen_ssa
diff options
context:
space:
mode:
authorDylan DPC <dylan.dpc@gmail.com>2020-03-21 22:56:20 +0100
committerGitHub <noreply@github.com>2020-03-21 22:56:20 +0100
commitecf3ef52a6f986863cce5eb749b73e182db3f36e (patch)
tree415fe822289721b9e69ae33c95110dbd51aed057 /src/librustc_codegen_ssa
parentce0af8a5bd90de722d5653965f7edcf2c302cf59 (diff)
parent96bbd1ccb6c210318d5ba90e7b68430b643e470a (diff)
downloadrust-ecf3ef52a6f986863cce5eb749b73e182db3f36e.tar.gz
rust-ecf3ef52a6f986863cce5eb749b73e182db3f36e.zip
Rollup merge of #70126 - wesleywiser:fix_miri_ice_neg_zst_enum_discr, r=RalfJung,eddyb
Fix ICE caused by truncating a negative ZST enum discriminant

Fixes #70114

r? @oli-obk or @RalfJung
Diffstat (limited to 'src/librustc_codegen_ssa')
-rw-r--r--src/librustc_codegen_ssa/mir/rvalue.rs7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/librustc_codegen_ssa/mir/rvalue.rs b/src/librustc_codegen_ssa/mir/rvalue.rs
index 6d004606398..245df0846b5 100644
--- a/src/librustc_codegen_ssa/mir/rvalue.rs
+++ b/src/librustc_codegen_ssa/mir/rvalue.rs
@@ -293,7 +293,12 @@ impl<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
                                 if let Some(discr) =
                                     operand.layout.ty.discriminant_for_variant(bx.tcx(), index)
                                 {
-                                    let discr_val = bx.cx().const_uint_big(ll_t_out, discr.val);
+                                    let discr_layout = bx.cx().layout_of(discr.ty);
+                                    let discr_t = bx.cx().immediate_backend_type(discr_layout);
+                                    let discr_val = bx.cx().const_uint_big(discr_t, discr.val);
+                                    let discr_val =
+                                        bx.intcast(discr_val, ll_t_out, discr.ty.is_signed());
+
                                     return (
                                         bx,
                                         OperandRef {