Skip to content

Commit 9cee3bc

Browse files
authored
Merge pull request #21061 from ChayimFriedman2/infer-array-size
fix: Allow inferring array sizes
2 parents dc8c1e8 + 9130da3 commit 9cee3bc

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

crates/hir-ty/src/infer/expr.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1336,14 +1336,18 @@ impl<'db> InferenceContext<'_, 'db> {
13361336
ExprIsRead::Yes,
13371337
);
13381338
let usize = self.types.usize;
1339-
match self.body[repeat] {
1339+
let len = match self.body[repeat] {
13401340
Expr::Underscore => {
13411341
self.write_expr_ty(repeat, usize);
1342+
self.table.next_const_var()
13421343
}
1343-
_ => _ = self.infer_expr(repeat, &Expectation::HasType(usize), ExprIsRead::Yes),
1344-
}
1344+
_ => {
1345+
self.infer_expr(repeat, &Expectation::HasType(usize), ExprIsRead::Yes);
1346+
consteval::eval_to_const(repeat, self)
1347+
}
1348+
};
13451349

1346-
(elem_ty, consteval::eval_to_const(repeat, self))
1350+
(elem_ty, len)
13471351
}
13481352
};
13491353
// Try to evaluate unevaluated constant, and insert variable if is not possible.

crates/hir-ty/src/tests/simple.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3943,3 +3943,16 @@ fn foo() {
39433943
"#]],
39443944
);
39453945
}
3946+
3947+
#[test]
3948+
fn infer_array_size() {
3949+
check_no_mismatches(
3950+
r#"
3951+
fn foo(a: [u8; 3]) {}
3952+
3953+
fn bar() {
3954+
foo([0; _]);
3955+
}
3956+
"#,
3957+
);
3958+
}

0 commit comments

Comments
 (0)