File tree Expand file tree Collapse file tree 3 files changed +38
-7
lines changed Expand file tree Collapse file tree 3 files changed +38
-7
lines changed Original file line number Diff line number Diff line change @@ -831,18 +831,18 @@ impl ExprCollector {
831
831
p. field_pat_list ( ) . expect ( "every struct should have a field list" ) ;
832
832
let mut fields: Vec < _ > = field_pat_list
833
833
. bind_pats ( )
834
- . map ( |bind_pat| {
834
+ . filter_map ( |bind_pat| {
835
835
let ast_pat = ast:: Pat :: cast ( bind_pat. syntax ( ) ) . expect ( "bind pat is a pat" ) ;
836
836
let pat = self . collect_pat ( ast_pat) ;
837
- let name = bind_pat. name ( ) . expect ( "bind pat has a name" ) . as_name ( ) ;
838
- FieldPat { name, pat }
837
+ let name = bind_pat. name ( ) ? . as_name ( ) ;
838
+ Some ( FieldPat { name, pat } )
839
839
} )
840
840
. collect ( ) ;
841
- let iter = field_pat_list. field_pats ( ) . map ( |f| {
842
- let ast_pat = f. pat ( ) . expect ( "field pat always contains a pattern" ) ;
841
+ let iter = field_pat_list. field_pats ( ) . filter_map ( |f| {
842
+ let ast_pat = f. pat ( ) ? ;
843
843
let pat = self . collect_pat ( ast_pat) ;
844
- let name = f. name ( ) . expect ( "field pats always have a name" ) . as_name ( ) ;
845
- FieldPat { name, pat }
844
+ let name = f. name ( ) ? . as_name ( ) ;
845
+ Some ( FieldPat { name, pat } )
846
846
} ) ;
847
847
fields. extend ( iter) ;
848
848
Original file line number Diff line number Diff line change
1
+ -- -
2
+ created : " 2019-02-09T19:55:39.712470520Z"
3
+ creator : insta @0.6 .1
4
+ source : crates / ra_hir / src / ty / tests .rs
5
+ expression : " &result"
6
+ -- -
7
+ [25 ; 110 ) ' { ... } }' : ()
8
+ [31 ; 108 ) ' match ... }' : ()
9
+ [37 ; 42 ) ' *self' : [unknown ]
10
+ [38 ; 42 ) ' self' : [unknown ]
11
+ [53 ; 95 ) ' Borrow...), ..}' : [unknown ]
12
+ [74 ; 77 ) ' box' : [unknown ]
13
+ [78 ; 87 ) ' Primitive' : [unknown ]
14
+ [88 ; 89 ) ' p' : [unknown ]
15
+ [99 ; 101 ) ' {}' : ()
16
+
Original file line number Diff line number Diff line change @@ -678,6 +678,21 @@ pub fn compute() {
678
678
) ;
679
679
}
680
680
681
+ #[ test]
682
+ fn infer_std_crash_4 ( ) {
683
+ // taken from rustc
684
+ check_inference (
685
+ "infer_std_crash_4" ,
686
+ r#"
687
+ pub fn primitive_type() {
688
+ match *self {
689
+ BorrowedRef { type_: box Primitive(p), ..} => {},
690
+ }
691
+ }
692
+ "# ,
693
+ ) ;
694
+ }
695
+
681
696
fn infer ( content : & str ) -> String {
682
697
let ( db, _, file_id) = MockDatabase :: with_single_file ( content) ;
683
698
let source_file = db. parse ( file_id) ;
You can’t perform that action at this time.
0 commit comments