Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/mir/lower.rs')
-rw-r--r--crates/hir-ty/src/mir/lower.rs7
1 files changed, 5 insertions, 2 deletions
diff --git a/crates/hir-ty/src/mir/lower.rs b/crates/hir-ty/src/mir/lower.rs
index d1277762eb..ab7e6df3f5 100644
--- a/crates/hir-ty/src/mir/lower.rs
+++ b/crates/hir-ty/src/mir/lower.rs
@@ -1404,11 +1404,14 @@ impl<'a, 'db> MirLowerCtx<'a, 'db> {
expr_id: ExprId,
) -> Result<'db, ()> {
if let Expr::Field { expr, name } = &self.store[expr_id] {
- if let TyKind::Tuple(..) = self.expr_ty_after_adjustments(*expr).kind() {
+ if let TyKind::Tuple(tys) = self.expr_ty_after_adjustments(*expr).kind() {
let index =
name.as_tuple_index().ok_or(MirLowerError::TypeError("named field on tuple"))?
as u32;
- *place = place.project(ProjectionElem::Field(FieldIndex(index)))
+ if tys.get(index as usize).is_none() {
+ return Err(MirLowerError::TypeError("tuple field index out of range"));
+ }
+ *place = place.project(ProjectionElem::Field(FieldIndex(index)));
} else {
let field = self
.infer