From db18b42343a080024279a0e44b785594dcaf8667 Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Sun, 5 Apr 2020 10:30:32 -0300 Subject: [PATCH] Evaluate unevaluated MIR constants in codegen_mir --- src/librustc_codegen_ssa/mir/mod.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/librustc_codegen_ssa/mir/mod.rs b/src/librustc_codegen_ssa/mir/mod.rs index cb6d2d297cd..663b37d5e65 100644 --- a/src/librustc_codegen_ssa/mir/mod.rs +++ b/src/librustc_codegen_ssa/mir/mod.rs @@ -1,6 +1,8 @@ use crate::base; use crate::traits::*; +use rustc_errors::ErrorReported; use rustc_middle::mir; +use rustc_middle::mir::interpret::ErrorHandled; use rustc_middle::ty::layout::{FnAbiExt, HasTyCtxt, TyAndLayout}; use rustc_middle::ty::{self, Instance, Ty, TypeFoldable}; use rustc_target::abi::call::{FnAbi, PassMode}; @@ -189,6 +191,18 @@ pub fn codegen_mir<'a, 'tcx, Bx: BuilderMethods<'a, 'tcx>>( fx.per_local_var_debug_info = fx.compute_per_local_var_debug_info(); + for const_ in &mir.uneval_consts { + if let Err(err) = fx.eval_mir_constant(const_) { + match err { + // errored or at least linted + ErrorHandled::Reported(ErrorReported) | ErrorHandled::Linted => {} + ErrorHandled::TooGeneric => { + span_bug!(const_.span, "codgen encountered polymorphic constant: {:?}", err) + } + } + } + } + let memory_locals = analyze::non_ssa_locals(&fx); // Allocate variable and temp allocas