]> git.lizzy.rs Git - rust.git/commitdiff
don't const eval constants during MIR creation
authorOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>
Fri, 29 Apr 2016 12:40:08 +0000 (14:40 +0200)
committerOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>
Tue, 5 Jul 2016 06:20:02 +0000 (08:20 +0200)
this didn't work very well anyway, because const_eval can't eval all kinds of constants.

src/librustc_mir/hair/cx/expr.rs
src/librustc_mir/hair/cx/mod.rs

index b5e2ce9de483692054406c1b0371dea674538ae8..88fb65d8eea03569d41c13958d524a7e6cf5fe48 100644 (file)
@@ -700,19 +700,7 @@ fn convert_path_expr<'a, 'gcx, 'tcx>(cx: &mut Cx<'a, 'gcx, 'tcx>,
             ref sty => bug!("unexpected sty: {:?}", sty)
         },
         Def::Const(def_id) |
-        Def::AssociatedConst(def_id) => {
-            let substs = Some(cx.tcx.node_id_item_substs(expr.id).substs);
-            let tcx = cx.tcx.global_tcx();
-            if let Some((e, _)) = const_eval::lookup_const_by_id(tcx, def_id, substs) {
-                // FIXME ConstVal can't be yet used with adjustments, as they would be lost.
-                if !cx.tcx.tables.borrow().adjustments.contains_key(&e.id) {
-                    if let Some(v) = cx.try_const_eval_literal(e) {
-                        return ExprKind::Literal { literal: v };
-                    }
-                }
-            }
-            def_id
-        }
+        Def::AssociatedConst(def_id) => def_id,
 
         Def::Static(node_id, _) => return ExprKind::StaticRef {
             id: node_id,
index 81b098281d6a19c578b84fac946526e7685c55b6..2438f43d24e0a42f8e87854af51e0ffe35c90ddb 100644 (file)
@@ -129,21 +129,6 @@ pub fn const_eval_literal(&mut self, e: &hir::Expr) -> Literal<'tcx> {
         }
     }
 
-    pub fn try_const_eval_literal(&mut self, e: &hir::Expr) -> Option<Literal<'tcx>> {
-        let hint = const_eval::EvalHint::ExprTypeChecked;
-        let tcx = self.tcx.global_tcx();
-        const_eval::eval_const_expr_partial(tcx, e, hint, None).ok().and_then(|v| {
-            match v {
-                // All of these contain local IDs, unsuitable for storing in MIR.
-                ConstVal::Struct(_) | ConstVal::Tuple(_) |
-                ConstVal::Array(..) | ConstVal::Repeat(..) |
-                ConstVal::Function(_) => None,
-
-                _ => Some(Literal::Value { value: v })
-            }
-        })
-    }
-
     pub fn trait_method(&mut self,
                         trait_def_id: DefId,
                         method_name: &str,