https://gcc.gnu.org/g:ca34282cc71a682b3d2d0d5a16201091649379b4

commit r16-2926-gca34282cc71a682b3d2d0d5a16201091649379b4
Author: Yap Zhi Heng <yapz...@gmail.com>
Date:   Tue Jul 8 22:15:09 2025 +0800

    gccrs: Improve LiteralPattern type checking
    
    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 <yapz...@gmail.com>

Diff:
---
 gcc/rust/typecheck/rust-hir-type-check-pattern.cc | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/gcc/rust/typecheck/rust-hir-type-check-pattern.cc 
b/gcc/rust/typecheck/rust-hir-type-check-pattern.cc
index c60d7868fdae..5608030db72c 100644
--- a/gcc/rust/typecheck/rust-hir-type-check-pattern.cc
+++ b/gcc/rust/typecheck/rust-hir-type-check-pattern.cc
@@ -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

Reply via email to