Skip to content

Commit f6a1db6

Browse files
Add some consistency checks for value interning in ty::ctxt.
1 parent fd2626c commit f6a1db6

File tree

1 file changed

+18
-5
lines changed

1 file changed

+18
-5
lines changed

src/librustc/middle/ty/context.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,10 @@ impl<'tcx> ctxt<'tcx> {
408408
-> &'tcx ty::TraitDef<'tcx> {
409409
let did = def.trait_ref.def_id;
410410
let interned = self.arenas.trait_defs.alloc(def);
411-
self.trait_defs.borrow_mut().insert(did, interned);
411+
if let Some(prev) = self.trait_defs.borrow_mut().insert(did, interned) {
412+
self.sess.bug(&format!("Tried to overwrite interned TraitDef: {:?}",
413+
prev))
414+
}
412415
interned
413416
}
414417

@@ -425,7 +428,10 @@ impl<'tcx> ctxt<'tcx> {
425428
let def = ty::AdtDefData::new(self, did, kind, variants);
426429
let interned = self.arenas.adt_defs.alloc(def);
427430
// this will need a transmute when reverse-variance is removed
428-
self.adt_defs.borrow_mut().insert(did, interned);
431+
if let Some(prev) = self.adt_defs.borrow_mut().insert(did, interned) {
432+
self.sess.bug(&format!("Tried to overwrite interned AdtDef: {:?}",
433+
prev))
434+
}
429435
interned
430436
}
431437

@@ -435,13 +441,20 @@ impl<'tcx> ctxt<'tcx> {
435441
}
436442

437443
let interned = self.arenas.stability.alloc(stab);
438-
self.stability_interner.borrow_mut().insert(interned, interned);
444+
if let Some(prev) = self.stability_interner
445+
.borrow_mut()
446+
.insert(interned, interned) {
447+
self.sess.bug(&format!("Tried to overwrite interned Stability: {:?}",
448+
prev))
449+
}
439450
interned
440451
}
441452

442453
pub fn store_free_region_map(&self, id: NodeId, map: FreeRegionMap) {
443-
self.free_region_maps.borrow_mut()
444-
.insert(id, map);
454+
if self.free_region_maps.borrow_mut().insert(id, map).is_some() {
455+
self.sess.bug(&format!("Tried to overwrite interned FreeRegionMap for NodeId {:?}",
456+
id))
457+
}
445458
}
446459

447460
pub fn free_region_map(&self, id: NodeId) -> FreeRegionMap {

0 commit comments

Comments
 (0)