about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSantiago Pastorino <spastorino@gmail.com>2020-04-05 10:30:32 -0300
committerSantiago Pastorino <spastorino@gmail.com>2020-04-23 16:50:17 -0300
commitdb18b42343a080024279a0e44b785594dcaf8667 (patch)
tree8c55be0e9612b706e334a2169654921ba9bd1952
parentf8976e377f694c98c180ce967b295531d1824563 (diff)
downloadrust-db18b42343a080024279a0e44b785594dcaf8667.tar.gz
rust-db18b42343a080024279a0e44b785594dcaf8667.zip
Evaluate unevaluated MIR constants in codegen_mir
-rw-r--r--src/librustc_codegen_ssa/mir/mod.rs14
1 files changed, 14 insertions, 0 deletions
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