diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2017-04-15 04:14:44 +0300 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2017-04-16 01:31:37 +0300 |
| commit | 6dc21b71cfd8e5246e7953cf64ea5ee6a19ceb3d (patch) | |
| tree | c1719d4b3991f2b9ee3033596f8557a1d554d223 /src/librustc_const_eval | |
| parent | 63064ec190fef7947c3eabfcdfeaeb293c9a91dd (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.rs | 11 |
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) } |
