From: Philip Herron <[email protected]>
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 <[email protected]>
---
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 b7587526431..7a39eb53710 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 2f94754bcb0..28f7a262cc1 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 }
}
--
2.45.2