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.rs8
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 {