Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/mir/lower/pattern_matching.rs')
| -rw-r--r-- | crates/hir-ty/src/mir/lower/pattern_matching.rs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/crates/hir-ty/src/mir/lower/pattern_matching.rs b/crates/hir-ty/src/mir/lower/pattern_matching.rs index 66b51a0e95..bd1ad70fe6 100644 --- a/crates/hir-ty/src/mir/lower/pattern_matching.rs +++ b/crates/hir-ty/src/mir/lower/pattern_matching.rs @@ -602,6 +602,14 @@ impl<'db> MirLowerCtx<'_, 'db> { shape: AdtPatternShape<'_>, mode: MatchingMode, ) -> Result<'db, (BasicBlockId, Option<BasicBlockId>)> { + let place_ty = cond_place.ty(&self.result, &self.infcx, self.env).ty; + let Some((place_adt, _)) = place_ty.as_adt() else { + return Err(MirLowerError::TypeError("non ADT type matched with ADT pattern")); + }; + if place_adt != variant.adt_id(self.db) { + return Err(MirLowerError::TypeError("ADT pattern does not match place type")); + } + Ok(match variant { VariantId::EnumVariantId(v) => { if mode == MatchingMode::Check { |