about summary refs log tree commit diff
path: root/src/librustc_const_eval
diff options
context:
space:
mode:
authorEduard-Mihai Burtescu <edy.burt@gmail.com>2017-04-15 04:14:44 +0300
committerEduard-Mihai Burtescu <edy.burt@gmail.com>2017-04-16 01:31:37 +0300
commit6dc21b71cfd8e5246e7953cf64ea5ee6a19ceb3d (patch)
treec1719d4b3991f2b9ee3033596f8557a1d554d223 /src/librustc_const_eval
parent63064ec190fef7947c3eabfcdfeaeb293c9a91dd (diff)
rustc: use monomorphic const_eval for cross-crate enum discriminants.
Diffstat (limited to 'src/librustc_const_eval')
-rw-r--r--src/librustc_const_eval/eval.rs11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/librustc_const_eval/eval.rs b/src/librustc_const_eval/eval.rs
index bf8085be31c..9c5a669bef0 100644
--- a/src/librustc_const_eval/eval.rs
+++ b/src/librustc_const_eval/eval.rs
@@ -804,10 +804,13 @@ pub fn provide(providers: &mut Providers) {
 fn monomorphic_const_eval<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
                                     def_id: DefId)
                                     -> EvalResult<'tcx> {
-    ty::queries::mir_const_qualif::get(tcx, DUMMY_SP, def_id);
     let cx = ConstContext::with_tables(tcx, tcx.item_tables(def_id));
 
-    let id = tcx.hir.as_local_node_id(def_id).unwrap();
-    let body = tcx.hir.body_owned_by(id);
-    cx.eval(&tcx.hir.body(body).value)
+    let body = if let Some(id) = tcx.hir.as_local_node_id(def_id) {
+        ty::queries::mir_const_qualif::get(tcx, DUMMY_SP, def_id);
+        tcx.hir.body(tcx.hir.body_owned_by(id))
+    } else {
+        tcx.sess.cstore.maybe_get_item_body(tcx, def_id).unwrap()
+    };
+    cx.eval(&body.value)
 }