@@ -507,14 +507,20 @@ pub fn check_pat(pcx: &pat_ctxt, pat: &ast::Pat, expected: ty::t) {
507
507
ty:: ty_struct( cid, ref substs) => {
508
508
// Verify that the pattern named the right structure.
509
509
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
+ } ,
518
524
}
519
525
520
526
check_struct_pat ( pcx, pat. id , pat. span , expected, path,
0 commit comments