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

commit r15-8778-gb767d01f17d69602ce69ff623e32510ac2673343
Author: Philip Herron <herron.phi...@googlemail.com>
Date:   Mon Feb 3 15:45:12 2025 +0000

    gccrs: coercion sites allow for type inference as well.
    
    Addresses Rust-GCC#3382 and Rust-GCC#3381
    
    gcc/rust/ChangeLog:
    
            * typecheck/rust-type-util.cc (coercion_site): allow inference vars
    
    gcc/testsuite/ChangeLog:
    
            * rust/compile/reference1.rs: fix error message
    
    Signed-off-by: Philip Herron <herron.phi...@googlemail.com>

Diff:
---
 gcc/rust/typecheck/rust-type-util.cc     | 6 ++++--
 gcc/testsuite/rust/compile/reference1.rs | 2 +-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/gcc/rust/typecheck/rust-type-util.cc 
b/gcc/rust/typecheck/rust-type-util.cc
index b7587526431f..7a39eb53710f 100644
--- a/gcc/rust/typecheck/rust-type-util.cc
+++ b/gcc/rust/typecheck/rust-type-util.cc
@@ -217,8 +217,10 @@ coercion_site (HirId id, TyTy::TyWithLocation lhs, 
TyTy::TyWithLocation rhs,
   rust_debug ("coerce_default_unify(a={%s}, b={%s})",
              receiver->debug_str ().c_str (), expected->debug_str ().c_str ());
   TyTy::BaseType *coerced
-    = unify_site (id, lhs, TyTy::TyWithLocation (receiver, rhs.get_locus ()),
-                 locus);
+    = unify_site_and (id, lhs,
+                     TyTy::TyWithLocation (receiver, rhs.get_locus ()), locus,
+                     true /*emit_error*/, true /*commit*/, true /*infer*/,
+                     true /*cleanup*/);
   context->insert_autoderef_mappings (id, std::move (result.adjustments));
   return coerced;
 }
diff --git a/gcc/testsuite/rust/compile/reference1.rs 
b/gcc/testsuite/rust/compile/reference1.rs
index 2f94754bcb02..28f7a262cc1b 100644
--- a/gcc/testsuite/rust/compile/reference1.rs
+++ b/gcc/testsuite/rust/compile/reference1.rs
@@ -2,5 +2,5 @@ fn main() {
     let a = &123;
     let b: &mut i32 = a;
     // { dg-error "mismatched mutability" "" { target *-*-* } .-1 }
-    // { dg-error "mismatched types, expected .&mut i32. but got .& i32." "" { 
target *-*-* } .-2 }
+    // { dg-error "mismatched types, expected .&mut i32. but got .& 
<integer>." "" { target *-*-* } .-2 }
 }

Reply via email to