diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 0dd03b1237b..c0a66ee81fd 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -297,7 +297,7 @@ struct ctxt_ { impl_trait_cache: RefCell>>, - trait_refs: @mut HashMap, + trait_refs: RefCell>, trait_defs: @mut HashMap, /// Despite its name, `items` does not only map NodeId to an item but @@ -986,7 +986,7 @@ pub fn mk_ctxt(s: session::Session, region_maps: region_maps, node_types: @mut HashMap::new(), node_type_substs: RefCell::new(HashMap::new()), - trait_refs: @mut HashMap::new(), + trait_refs: RefCell::new(HashMap::new()), trait_defs: @mut HashMap::new(), items: amap, intrinsic_defs: @mut HashMap::new(), @@ -2654,7 +2654,8 @@ pub fn index_sty(sty: &sty) -> Option { } pub fn node_id_to_trait_ref(cx: ctxt, id: ast::NodeId) -> @ty::TraitRef { - match cx.trait_refs.find(&id) { + let trait_refs = cx.trait_refs.borrow(); + match trait_refs.get().find(&id) { Some(&t) => t, None => cx.sess.bug( format!("node_id_to_trait_ref: no trait ref for node `{}`", diff --git a/src/librustc/middle/typeck/collect.rs b/src/librustc/middle/typeck/collect.rs index 99f25d8e045..2391742ea9a 100644 --- a/src/librustc/middle/typeck/collect.rs +++ b/src/librustc/middle/typeck/collect.rs @@ -710,8 +710,9 @@ pub fn instantiate_trait_ref(ccx: &CrateCtxt, let trait_ref = astconv::ast_path_to_trait_ref( ccx, &rscope, trait_did, Some(self_ty), &ast_trait_ref.path); - ccx.tcx.trait_refs.insert( - ast_trait_ref.ref_id, trait_ref); + + let mut trait_refs = ccx.tcx.trait_refs.borrow_mut(); + trait_refs.get().insert(ast_trait_ref.ref_id, trait_ref); return trait_ref; } _ => {