@@ -261,7 +261,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
261261 if let hir:: ExprKind :: MethodCall ( hir:: PathSegment { ident : method, .. } , recv_expr, & [ ] , _) =
262262 expr. kind
263263 && let Some ( recv_ty) = self . typeck_results . borrow ( ) . expr_ty_opt ( recv_expr)
264- && self . can_coerce ( recv_ty, expected)
264+ && self . may_coerce ( recv_ty, expected)
265265 && let name = method. name . as_str ( )
266266 && ( name. starts_with ( "to_" ) || name. starts_with ( "as_" ) || name == "into" )
267267 {
@@ -349,7 +349,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
349349 return true ;
350350 }
351351
352- if self . suggest_fn_call ( err, expr, found, |output| self . can_coerce ( output, expected) )
352+ if self . suggest_fn_call ( err, expr, found, |output| self . may_coerce ( output, expected) )
353353 && let ty:: FnDef ( def_id, ..) = * found. kind ( )
354354 && let Some ( sp) = self . tcx . hir ( ) . span_if_local ( def_id)
355355 {
@@ -568,7 +568,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
568568 if self . tcx . hir ( ) . is_inside_const_context ( hir_id) || !expected. is_box ( ) || found. is_box ( ) {
569569 return false ;
570570 }
571- if self . can_coerce ( Ty :: new_box ( self . tcx , found) , expected) {
571+ if self . may_coerce ( Ty :: new_box ( self . tcx , found) , expected) {
572572 let suggest_boxing = match found. kind ( ) {
573573 ty:: Tuple ( tuple) if tuple. is_empty ( ) => {
574574 errors:: SuggestBoxing :: Unit { start : span. shrink_to_lo ( ) , end : span }
@@ -663,7 +663,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
663663 } ;
664664 match expected. kind ( ) {
665665 ty:: Adt ( def, _) if Some ( def. did ( ) ) == pin_did => {
666- if self . can_coerce ( pin_box_found, expected) {
666+ if self . may_coerce ( pin_box_found, expected) {
667667 debug ! ( "can coerce {:?} to {:?}, suggesting Box::pin" , pin_box_found, expected) ;
668668 match found. kind ( ) {
669669 ty:: Adt ( def, _) if def. is_box ( ) => {
@@ -689,7 +689,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
689689 }
690690 }
691691 true
692- } else if self . can_coerce ( pin_found, expected) {
692+ } else if self . may_coerce ( pin_found, expected) {
693693 match found. kind ( ) {
694694 ty:: Adt ( def, _) if def. is_box ( ) => {
695695 err. help ( "use `Box::pin`" ) ;
@@ -701,7 +701,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
701701 false
702702 }
703703 }
704- ty:: Adt ( def, _) if def. is_box ( ) && self . can_coerce ( box_found, expected) => {
704+ ty:: Adt ( def, _) if def. is_box ( ) && self . may_coerce ( box_found, expected) => {
705705 // Check if the parent expression is a call to Pin::new. If it
706706 // is and we were expecting a Box, ergo Pin<Box<expected>>, we
707707 // can suggest Box::pin.
@@ -884,7 +884,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
884884 let ty = Binder :: bind_with_vars ( ty, bound_vars) ;
885885 let ty = self . normalize ( hir_ty. span , ty) ;
886886 let ty = self . tcx . instantiate_bound_regions_with_erased ( ty) ;
887- if self . can_coerce ( expected, ty) {
887+ if self . may_coerce ( expected, ty) {
888888 err. subdiagnostic ( errors:: ExpectedReturnTypeLabel :: Other {
889889 span : hir_ty. span ,
890890 expected,
@@ -1141,12 +1141,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
11411141 ty:: Asyncness :: No => ty,
11421142 } ;
11431143 let ty = self . normalize ( expr. span , ty) ;
1144- self . can_coerce ( found, ty)
1144+ self . may_coerce ( found, ty)
11451145 }
11461146 hir:: FnRetTy :: DefaultReturn ( _) if in_closure => {
11471147 self . ret_coercion . as_ref ( ) . map_or ( false , |ret| {
11481148 let ret_ty = ret. borrow ( ) . expected_ty ( ) ;
1149- self . can_coerce ( found, ret_ty)
1149+ self . may_coerce ( found, ret_ty)
11501150 } )
11511151 }
11521152 _ => false ,
@@ -1510,7 +1510,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
15101510 provided_ty
15111511 } ;
15121512
1513- if !self . can_coerce ( expected_ty, dummy_ty) {
1513+ if !self . may_coerce ( expected_ty, dummy_ty) {
15141514 return ;
15151515 }
15161516 let msg = format ! ( "use `{adt_name}::map_or` to deref inner value of `{adt_name}`" ) ;
@@ -1534,7 +1534,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
15341534 expected_ty : Ty < ' tcx > ,
15351535 ) {
15361536 if let ty:: Slice ( elem_ty) | ty:: Array ( elem_ty, _) = expected_ty. kind ( ) {
1537- if self . can_coerce ( blk_ty, * elem_ty)
1537+ if self . may_coerce ( blk_ty, * elem_ty)
15381538 && blk. stmts . is_empty ( )
15391539 && blk. rules == hir:: BlockCheckMode :: DefaultBlock
15401540 {
@@ -1744,7 +1744,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
17441744 if item_ty. has_param ( ) {
17451745 return false ;
17461746 }
1747- if self . can_coerce ( item_ty, expected_ty) {
1747+ if self . may_coerce ( item_ty, expected_ty) {
17481748 err. span_suggestion_verbose (
17491749 segment. ident . span ,
17501750 format ! ( "try referring to the associated const `{capitalized_name}` instead" , ) ,
@@ -1804,7 +1804,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
18041804 // diagnostic in cases where we have `(&&T).clone()` and we expect `T`).
18051805 && !results. expr_adjustments ( callee_expr) . iter ( ) . any ( |adj| matches ! ( adj. kind, ty:: adjustment:: Adjust :: Deref ( ..) ) )
18061806 // Check that we're in fact trying to clone into the expected type
1807- && self . can_coerce ( * pointee_ty, expected_ty)
1807+ && self . may_coerce ( * pointee_ty, expected_ty)
18081808 && let trait_ref = ty:: TraitRef :: new ( self . tcx , clone_trait_did, [ expected_ty] )
18091809 // And the expected type doesn't implement `Clone`
18101810 && !self . predicate_must_hold_considering_regions ( & traits:: Obligation :: new (
@@ -2022,7 +2022,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
20222022 } else {
20232023 return false ;
20242024 } ;
2025- if is_ctor || !self . can_coerce ( args. type_at ( 0 ) , expected) {
2025+ if is_ctor || !self . may_coerce ( args. type_at ( 0 ) , expected) {
20262026 return false ;
20272027 }
20282028
@@ -2293,7 +2293,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
22932293 . then ( || " (its field is private, but it's local to this crate and its privacy can be changed)" . to_string ( ) ) ;
22942294
22952295 let sole_field_ty = sole_field. ty ( self . tcx , args) ;
2296- if self . can_coerce ( expr_ty, sole_field_ty) {
2296+ if self . may_coerce ( expr_ty, sole_field_ty) {
22972297 let variant_path =
22982298 with_no_trimmed_paths ! ( self . tcx. def_path_str( variant. def_id) ) ;
22992299 // FIXME #56861: DRYer prelude filtering
@@ -2401,7 +2401,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
24012401 }
24022402
24032403 let int_type = args. type_at ( 0 ) ;
2404- if !self . can_coerce ( expr_ty, int_type) {
2404+ if !self . may_coerce ( expr_ty, int_type) {
24052405 return false ;
24062406 }
24072407
@@ -2585,7 +2585,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
25852585 Ty :: new_imm_ref ( self . tcx , self . tcx . lifetimes . re_static , checked_ty)
25862586 }
25872587 } ;
2588- if self . can_coerce ( ref_ty, expected) {
2588+ if self . may_coerce ( ref_ty, expected) {
25892589 let mut sugg_sp = sp;
25902590 if let hir:: ExprKind :: MethodCall ( segment, receiver, args, _) = expr. kind {
25912591 let clone_trait =
0 commit comments