File tree 2 files changed +21
-4
lines changed
2 files changed +21
-4
lines changed Original file line number Diff line number Diff line change @@ -1357,10 +1357,10 @@ fn replace_types<'tcx>(
1357
1357
&& let Some ( term_ty) = projection_predicate. term . ty ( )
1358
1358
&& let ty:: Param ( term_param_ty) = term_ty. kind ( )
1359
1359
{
1360
- let item_def_id = projection_predicate . projection_ty . def_id ;
1361
- let assoc_item = cx . tcx . associated_item ( item_def_id ) ;
1362
- let projection = cx. tcx
1363
- . mk_projection ( assoc_item . def_id , cx . tcx . mk_substs_trait ( new_ty , [ ] ) ) ;
1360
+ let projection = cx . tcx . mk_ty ( ty :: Alias (
1361
+ ty :: Projection ,
1362
+ projection_predicate . projection_ty . with_self_ty ( cx. tcx , new_ty ) ,
1363
+ ) ) ;
1364
1364
1365
1365
if let Ok ( projected_ty) = cx. tcx . try_normalize_erasing_regions ( cx. param_env , projection)
1366
1366
&& substs[ term_param_ty. index as usize ] != ty:: GenericArg :: from ( projected_ty)
Original file line number Diff line number Diff line change
1
+ #![ allow( dead_code) ]
2
+
3
+ struct Foo ;
4
+
5
+ impl < ' a > std:: convert:: TryFrom < & ' a String > for Foo {
6
+ type Error = std:: convert:: Infallible ;
7
+
8
+ fn try_from ( _: & ' a String ) -> Result < Self , Self :: Error > {
9
+ Ok ( Foo )
10
+ }
11
+ }
12
+
13
+ fn find < E > ( _: impl std:: convert:: TryInto < Foo , Error = E > ) { }
14
+
15
+ fn main ( ) {
16
+ find ( & String :: new ( ) ) ;
17
+ }
You can’t perform that action at this time.
0 commit comments