@@ -1002,28 +1002,39 @@ impl <'l, 'tcx> DxrVisitor<'l, 'tcx> {
1002
1002
ast:: PatStruct ( ref path, ref fields, _) => {
1003
1003
self . collected_paths . push ( ( p. id , path. clone ( ) , false , recorder:: StructRef ) ) ;
1004
1004
visit:: walk_path ( self , path) ;
1005
- let struct_def = match self . lookup_type_ref ( p. id ) {
1006
- Some ( sd) => sd,
1007
- None => {
1008
- self . sess . span_bug ( p. span ,
1009
- & format ! ( "Could not find struct_def for `{}`" ,
1010
- self . span. snippet( p. span) ) ) ;
1005
+
1006
+ let def = self . analysis . ty_cx . def_map . borrow ( ) [ p. id ] ;
1007
+ let struct_def = match def {
1008
+ def:: DefConst ( ..) => None ,
1009
+ def:: DefVariant ( _, variant_id, _) => Some ( variant_id) ,
1010
+ _ => {
1011
+ match ty:: ty_to_def_id ( ty:: node_id_to_type ( & self . analysis . ty_cx , p. id ) ) {
1012
+ None => {
1013
+ self . sess . span_bug ( p. span ,
1014
+ & format ! ( "Could not find struct_def for `{}`" ,
1015
+ self . span. snippet( p. span) ) ) ;
1016
+ }
1017
+ Some ( def_id) => Some ( def_id) ,
1018
+ }
1011
1019
}
1012
1020
} ;
1013
- for & Spanned { node : ref field, span } in fields {
1014
- let sub_span = self . span . span_for_first_ident ( span) ;
1015
- let fields = ty:: lookup_struct_fields ( & self . analysis . ty_cx , struct_def) ;
1016
- for f in fields {
1017
- if f. name == field. ident . name {
1018
- self . fmt . ref_str ( recorder:: VarRef ,
1019
- span,
1020
- sub_span,
1021
- f. id ,
1022
- self . cur_scope ) ;
1023
- break ;
1021
+
1022
+ if let Some ( struct_def) = struct_def {
1023
+ let struct_fields = ty:: lookup_struct_fields ( & self . analysis . ty_cx , struct_def) ;
1024
+ for & Spanned { node : ref field, span } in fields {
1025
+ let sub_span = self . span . span_for_first_ident ( span) ;
1026
+ for f in & struct_fields {
1027
+ if f. name == field. ident . name {
1028
+ self . fmt . ref_str ( recorder:: VarRef ,
1029
+ span,
1030
+ sub_span,
1031
+ f. id ,
1032
+ self . cur_scope ) ;
1033
+ break ;
1034
+ }
1024
1035
}
1036
+ self . visit_pat ( & * field. pat ) ;
1025
1037
}
1026
- self . visit_pat ( & * field. pat ) ;
1027
1038
}
1028
1039
}
1029
1040
ast:: PatEnum ( ref path, _) => {
0 commit comments