Skip to content

Commit 741bb1a

Browse files
committed
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.
1 parent bdf5b6c commit 741bb1a

File tree

1 file changed

+14
-8
lines changed

1 file changed

+14
-8
lines changed

src/librustc/middle/typeck/check/_match.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -507,14 +507,20 @@ pub fn check_pat(pcx: &pat_ctxt, pat: &ast::Pat, expected: ty::t) {
507507
ty::ty_struct(cid, ref substs) => {
508508
// Verify that the pattern named the right structure.
509509
let item_did = tcx.def_map.borrow().get(&pat.id).def_id();
510-
let struct_did =
511-
ty::ty_to_def_id(
512-
ty::lookup_item_type(tcx, item_did).ty).unwrap();
513-
if struct_did != cid {
514-
span_err!(tcx.sess, pat.span, E0032,
515-
"`{}` does not name the structure `{}`",
516-
pprust::path_to_string(path),
517-
fcx.infcx().ty_to_string(expected));
510+
match ty::ty_to_def_id(ty::lookup_item_type(tcx, item_did).ty) {
511+
Some(struct_did) if struct_did != cid => {
512+
span_err!(tcx.sess, path.span, E0032,
513+
"`{}` does not name the structure `{}`",
514+
pprust::path_to_string(path),
515+
fcx.infcx().ty_to_string(expected));
516+
},
517+
Some(_) => {},
518+
None => {
519+
tcx.sess.span_bug(
520+
path.span,
521+
format!("This shouldn't happen: failed to lookup structure. \
522+
item_did = {}", item_did).as_slice())
523+
},
518524
}
519525

520526
check_struct_pat(pcx, pat.id, pat.span, expected, path,

0 commit comments

Comments
 (0)