@@ -2490,7 +2490,7 @@ fn check_argument_types<'a, 'tcx>(fcx: &FnCtxt<'a, 'tcx>,
24902490 // The special-cased logic below has three functions:
24912491 // 1. Provide as good of an expected type as possible.
24922492 let expected = expected_arg_tys. get ( i) . map ( |& ty| {
2493- Expectation :: rvalue_hint ( ty)
2493+ Expectation :: rvalue_hint ( fcx . tcx ( ) , ty)
24942494 } ) ;
24952495
24962496 check_expr_with_unifier ( fcx, & * * arg,
@@ -3268,7 +3268,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
32683268 match unop {
32693269 ast:: UnUniq => match ty. sty {
32703270 ty:: TyBox ( ty) => {
3271- Expectation :: rvalue_hint ( ty)
3271+ Expectation :: rvalue_hint ( tcx , ty)
32723272 }
32733273 _ => {
32743274 NoExpectation
@@ -3345,7 +3345,7 @@ fn check_expr_with_unifier<'a, 'tcx, F>(fcx: &FnCtxt<'a, 'tcx>,
33453345 // the last field of a struct can be unsized.
33463346 ExpectHasType ( mt. ty )
33473347 } else {
3348- Expectation :: rvalue_hint ( mt. ty )
3348+ Expectation :: rvalue_hint ( tcx , mt. ty )
33493349 }
33503350 }
33513351 _ => NoExpectation
@@ -3982,8 +3982,8 @@ impl<'tcx> Expectation<'tcx> {
39823982 /// which still is useful, because it informs integer literals and the like.
39833983 /// See the test case `test/run-pass/coerce-expect-unsized.rs` and #20169
39843984 /// for examples of where this comes up,.
3985- fn rvalue_hint ( ty : Ty < ' tcx > ) -> Expectation < ' tcx > {
3986- match ty . sty {
3985+ fn rvalue_hint ( tcx : & ty :: ctxt < ' tcx > , ty : Ty < ' tcx > ) -> Expectation < ' tcx > {
3986+ match tcx . struct_tail ( ty ) . sty {
39873987 ty:: TySlice ( _) | ty:: TyTrait ( ..) => {
39883988 ExpectRvalueLikeUnsized ( ty)
39893989 }
0 commit comments