提交 741bb1a5 编写于 作者: B Ben Gamari

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.
上级 bdf5b6c3
......@@ -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,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册