Fix ICE with unresolved associated items in closures (fixes #28971)

This commit is contained in:
Manish Goregaokar 2015-10-12 02:14:55 +05:30
parent a5fbb3a25f
commit 6468292c35
2 changed files with 39 additions and 1 deletions

View file

@ -1196,7 +1196,18 @@ impl<'t, 'a,'tcx> MemCategorizationContext<'t, 'a, 'tcx> {
(*op)(self, cmt.clone(), pat);
let opt_def = self.tcx().def_map.borrow().get(&pat.id).map(|d| d.full_def());
let opt_def = if let Some(path_res) = self.tcx().def_map.borrow().get(&pat.id) {
if path_res.depth != 0 {
// Since patterns can be associated constants
// which are resolved during typeck, we might have
// some unresolved patterns reaching this stage
// without aborting
return Err(());
}
Some(path_res.full_def())
} else {
None
};
// Note: This goes up here (rather than within the PatEnum arm
// alone) because struct patterns can refer to struct types or