From 04367100cd75d1136445e11e93786e875f38a2de Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 15 May 2017 23:23:40 -0400 Subject: [PATCH] fix DepNode Ideally, we'd have the `Ty` inserted directly in the dep-node, but since we can't do that yet, we extract the characteristic def-id of the type in question. --- src/librustc/ty/maps.rs | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/src/librustc/ty/maps.rs b/src/librustc/ty/maps.rs index 31492a8624da..fb352e5be893 100644 --- a/src/librustc/ty/maps.rs +++ b/src/librustc/ty/maps.rs @@ -942,22 +942,26 @@ fn relevant_trait_impls_for((def_id, _): (DefId, SimplifiedType)) -> DepNode(_: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> DepNode { - let krate_def_id = DefId::local(CRATE_DEF_INDEX); - DepNode::IsCopy(krate_def_id) +fn is_copy_dep_node<'tcx>(key: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> DepNode { + let def_id = ty::item_path::characteristic_def_id_of_type(key.value) + .unwrap_or(DefId::local(CRATE_DEF_INDEX)); + DepNode::IsCopy(def_id) } -fn is_sized_dep_node<'tcx>(_: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> DepNode { - let krate_def_id = DefId::local(CRATE_DEF_INDEX); - DepNode::IsSized(krate_def_id) +fn is_sized_dep_node<'tcx>(key: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> DepNode { + let def_id = ty::item_path::characteristic_def_id_of_type(key.value) + .unwrap_or(DefId::local(CRATE_DEF_INDEX)); + DepNode::IsSized(def_id) } -fn is_freeze_dep_node<'tcx>(_: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> DepNode { - let krate_def_id = DefId::local(CRATE_DEF_INDEX); - DepNode::IsSized(krate_def_id) +fn is_freeze_dep_node<'tcx>(key: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> DepNode { + let def_id = ty::item_path::characteristic_def_id_of_type(key.value) + .unwrap_or(DefId::local(CRATE_DEF_INDEX)); + DepNode::IsFreeze(def_id) } -fn needs_drop_dep_node<'tcx>(_: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> DepNode { - let krate_def_id = DefId::local(CRATE_DEF_INDEX); - DepNode::NeedsDrop(krate_def_id) +fn needs_drop_dep_node<'tcx>(key: ty::ParamEnvAnd<'tcx, Ty<'tcx>>) -> DepNode { + let def_id = ty::item_path::characteristic_def_id_of_type(key.value) + .unwrap_or(DefId::local(CRATE_DEF_INDEX)); + DepNode::NeedsDrop(def_id) }