diff --git a/src/librustc/middle/const_eval.rs b/src/librustc/middle/const_eval.rs index 248ff1fdd16..a81964aad82 100644 --- a/src/librustc/middle/const_eval.rs +++ b/src/librustc/middle/const_eval.rs @@ -154,9 +154,12 @@ pub fn lookup_const_by_id(tcx: ty::ctxt, Some(_) => None } } else { - match tcx.extern_const_statics.find(&def_id) { - Some(&e) => return e, - None => {} + { + let extern_const_statics = tcx.extern_const_statics.borrow(); + match extern_const_statics.get().find(&def_id) { + Some(&e) => return e, + None => {} + } } let maps = astencode::Maps { root_map: @mut HashMap::new(), @@ -173,8 +176,12 @@ pub fn lookup_const_by_id(tcx: ty::ctxt, }, _ => None }; - tcx.extern_const_statics.insert(def_id, e); - return e; + { + let mut extern_const_statics = tcx.extern_const_statics + .borrow_mut(); + extern_const_statics.get().insert(def_id, e); + return e; + } } } diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index 8722aba1599..2acf37697d1 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -368,7 +368,7 @@ struct ctxt_ { // These two caches are used by const_eval when decoding external statics // and variants that are found. - extern_const_statics: @mut HashMap>, + extern_const_statics: RefCell>>, extern_const_variants: @mut HashMap>, } @@ -1014,7 +1014,7 @@ pub fn mk_ctxt(s: session::Session, populated_external_types: @mut HashSet::new(), populated_external_traits: @mut HashSet::new(), - extern_const_statics: @mut HashMap::new(), + extern_const_statics: RefCell::new(HashMap::new()), extern_const_variants: @mut HashMap::new(), } }