Skip to content

Commit c0c3b37

Browse files
committed
Fix another crash found when analyzing rustc
1 parent f1afc93 commit c0c3b37

File tree

3 files changed

+38
-7
lines changed

3 files changed

+38
-7
lines changed

crates/ra_hir/src/expr.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -831,18 +831,18 @@ impl ExprCollector {
831831
p.field_pat_list().expect("every struct should have a field list");
832832
let mut fields: Vec<_> = field_pat_list
833833
.bind_pats()
834-
.map(|bind_pat| {
834+
.filter_map(|bind_pat| {
835835
let ast_pat = ast::Pat::cast(bind_pat.syntax()).expect("bind pat is a pat");
836836
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 })
839839
})
840840
.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()?;
843843
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 })
846846
});
847847
fields.extend(iter);
848848

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
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+

crates/ra_hir/src/ty/tests.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,21 @@ pub fn compute() {
678678
);
679679
}
680680

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+
681696
fn infer(content: &str) -> String {
682697
let (db, _, file_id) = MockDatabase::with_single_file(content);
683698
let source_file = db.parse(file_id);

0 commit comments

Comments
 (0)