diff --git a/src/librustc/middle/trans/context.rs b/src/librustc/middle/trans/context.rs index eaf94568d934..449862c898d1 100644 --- a/src/librustc/middle/trans/context.rs +++ b/src/librustc/middle/trans/context.rs @@ -93,7 +93,7 @@ pub struct CrateContext { module_data: RefCell>, lltypes: RefCell>, - llsizingtypes: HashMap, + llsizingtypes: RefCell>, adt_reprs: HashMap, symbol_hasher: Sha256, type_hashcodes: HashMap, @@ -204,7 +204,7 @@ impl CrateContext { impl_method_cache: RefCell::new(HashMap::new()), module_data: RefCell::new(HashMap::new()), lltypes: RefCell::new(HashMap::new()), - llsizingtypes: HashMap::new(), + llsizingtypes: RefCell::new(HashMap::new()), adt_reprs: HashMap::new(), symbol_hasher: symbol_hasher, type_hashcodes: HashMap::new(), diff --git a/src/librustc/middle/trans/type_of.rs b/src/librustc/middle/trans/type_of.rs index 7f3cee7c4024..2270b5aa0581 100644 --- a/src/librustc/middle/trans/type_of.rs +++ b/src/librustc/middle/trans/type_of.rs @@ -101,9 +101,12 @@ pub fn type_of_fn_from_ty(cx: &mut CrateContext, fty: ty::t) -> Type { // recursive types. For example, enum types rely on this behavior. pub fn sizing_type_of(cx: &mut CrateContext, t: ty::t) -> Type { - match cx.llsizingtypes.find_copy(&t) { - Some(t) => return t, - None => () + { + let llsizingtypes = cx.llsizingtypes.borrow(); + match llsizingtypes.get().find_copy(&t) { + Some(t) => return t, + None => () + } } let llsizingty = match ty::get(t).sty { @@ -166,7 +169,8 @@ pub fn sizing_type_of(cx: &mut CrateContext, t: ty::t) -> Type { } }; - cx.llsizingtypes.insert(t, llsizingty); + let mut llsizingtypes = cx.llsizingtypes.borrow_mut(); + llsizingtypes.get().insert(t, llsizingty); llsizingty }