typeck::check::_match: Better error handling
Previously this was an Option::unwrap() which failed for me. Unfortunately I've since inadvertently worked around the bug and have been unable to reproduce it. With this patch hopefully the next person to encounter this will be in a slightly better position to debug it.
This commit is contained in:
parent
bdf5b6c3da
commit
741bb1a57e
1 changed files with 14 additions and 8 deletions
|
@ -507,14 +507,20 @@ pub fn check_pat(pcx: &pat_ctxt, pat: &ast::Pat, expected: ty::t) {
|
|||
ty::ty_struct(cid, ref substs) => {
|
||||
// Verify that the pattern named the right structure.
|
||||
let item_did = tcx.def_map.borrow().get(&pat.id).def_id();
|
||||
let struct_did =
|
||||
ty::ty_to_def_id(
|
||||
ty::lookup_item_type(tcx, item_did).ty).unwrap();
|
||||
if struct_did != cid {
|
||||
span_err!(tcx.sess, pat.span, E0032,
|
||||
"`{}` does not name the structure `{}`",
|
||||
pprust::path_to_string(path),
|
||||
fcx.infcx().ty_to_string(expected));
|
||||
match ty::ty_to_def_id(ty::lookup_item_type(tcx, item_did).ty) {
|
||||
Some(struct_did) if struct_did != cid => {
|
||||
span_err!(tcx.sess, path.span, E0032,
|
||||
"`{}` does not name the structure `{}`",
|
||||
pprust::path_to_string(path),
|
||||
fcx.infcx().ty_to_string(expected));
|
||||
},
|
||||
Some(_) => {},
|
||||
None => {
|
||||
tcx.sess.span_bug(
|
||||
path.span,
|
||||
format!("This shouldn't happen: failed to lookup structure. \
|
||||
item_did = {}", item_did).as_slice())
|
||||
},
|
||||
}
|
||||
|
||||
check_struct_pat(pcx, pat.id, pat.span, expected, path,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue