Skip to content

Commit 3b2602c

Browse files
committed
Don't unify array elements with their arrays
1 parent 85f0f9e commit 3b2602c

File tree

2 files changed

+21
-9
lines changed

2 files changed

+21
-9
lines changed

crates/hir_ty/src/infer/expr.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -735,10 +735,11 @@ impl<'a> InferenceContext<'a> {
735735
_ => self.table.new_type_var(),
736736
};
737737

738+
let expected = Expectation::has_type(elem_ty.clone());
738739
let len = match array {
739740
Array::ElementList(items) => {
740741
for expr in items.iter() {
741-
let cur_elem_ty = self.infer_expr_inner(*expr, expected);
742+
let cur_elem_ty = self.infer_expr_inner(*expr, &expected);
742743
elem_ty = self.coerce_merge_branch(Some(*expr), &elem_ty, &cur_elem_ty);
743744
}
744745
Some(items.len() as u64)

crates/hir_ty/src/tests/regression.rs

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -117,23 +117,34 @@ fn recursive_vars_2() {
117117
"#,
118118
expect![[r#"
119119
10..79 '{ ...x)]; }': ()
120-
20..21 'x': {unknown}
121-
24..31 'unknown': {unknown}
120+
20..21 'x': &{unknown}
121+
24..31 'unknown': &{unknown}
122122
41..42 'y': {unknown}
123123
45..52 'unknown': {unknown}
124-
58..76 '[(x, y..., &x)]': [({unknown}, {unknown}); 2]
125-
59..65 '(x, y)': ({unknown}, {unknown})
126-
60..61 'x': {unknown}
124+
58..76 '[(x, y..., &x)]': [(&{unknown}, {unknown}); 2]
125+
59..65 '(x, y)': (&{unknown}, {unknown})
126+
60..61 'x': &{unknown}
127127
63..64 'y': {unknown}
128-
67..75 '(&y, &x)': (&{unknown}, &{unknown})
128+
67..75 '(&y, &x)': (&{unknown}, {unknown})
129129
68..70 '&y': &{unknown}
130130
69..70 'y': {unknown}
131-
72..74 '&x': &{unknown}
132-
73..74 'x': {unknown}
131+
72..74 '&x': &&{unknown}
132+
73..74 'x': &{unknown}
133133
"#]],
134134
);
135135
}
136136

137+
#[test]
138+
fn array_elements_expected_type() {
139+
check_no_mismatches(
140+
r#"
141+
fn test() {
142+
let x: [[u32; 2]; 2] = [[1, 2], [3, 4]];
143+
}
144+
"#,
145+
);
146+
}
147+
137148
#[test]
138149
fn infer_std_crash_1() {
139150
// caused stack overflow, taken from std

0 commit comments

Comments
 (0)