]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Improve LiteralPattern type checking
authorYap Zhi Heng <yapzhhg@gmail.com>
Tue, 8 Jul 2025 14:15:09 +0000 (22:15 +0800)
committerArthur Cohen <arthur.cohen@embecosm.com>
Tue, 5 Aug 2025 14:36:54 +0000 (16:36 +0200)
This change is made to ensure that LiteralPatterns in SlicePattern are type-checked
against the scrutinee array/slice's element type properly.

gcc/rust/ChangeLog:

* typecheck/rust-hir-type-check-pattern.cc(TypeCheckPattern::visit(LiteralPattern)):
Check LiteralPattern's type against its parent.

Signed-off-by: Yap Zhi Heng <yapzhhg@gmail.com>
gcc/rust/typecheck/rust-hir-type-check-pattern.cc

index c60d7868fdae695fea8ed5a9d2486adb81eae422..5608030db72c641a0afc0f4d9ccdaa3fae7b616e 100644 (file)
@@ -563,8 +563,18 @@ TypeCheckPattern::visit (HIR::TuplePattern &pattern)
 void
 TypeCheckPattern::visit (HIR::LiteralPattern &pattern)
 {
-  infered = resolve_literal (pattern.get_mappings (), pattern.get_literal (),
-                            pattern.get_locus ());
+  TyTy::BaseType *resolved
+    = resolve_literal (pattern.get_mappings (), pattern.get_literal (),
+                      pattern.get_locus ());
+  if (resolved->get_kind () == TyTy::TypeKind::ERROR)
+    {
+      infered = resolved;
+      return;
+    }
+
+  infered = unify_site (pattern.get_mappings ().get_hirid (),
+                       TyTy::TyWithLocation (parent),
+                       TyTy::TyWithLocation (resolved), pattern.get_locus ());
 }
 
 void