@@ -909,36 +909,36 @@ mod generic_enum {
909909}
910910
911911mod method_supertraits {
912- #[ derive( Debug ) ]
912+ #[ derive( Debug , Clone , Copy ) ]
913913 struct MyThing < A > {
914914 a : A ,
915915 }
916916
917- #[ derive( Debug ) ]
917+ #[ derive( Debug , Clone , Copy ) ]
918918 struct MyThing2 < A > {
919919 a : A ,
920920 }
921921
922- #[ derive( Debug ) ]
922+ #[ derive( Debug , Clone , Copy ) ]
923923 struct S1 ;
924- #[ derive( Debug ) ]
924+ #[ derive( Debug , Clone , Copy ) ]
925925 struct S2 ;
926926
927927 trait MyTrait1 < Tr1 > {
928928 // MyTrait1::m1
929929 fn m1 ( self ) -> Tr1 ;
930930 }
931931
932- trait MyTrait2 < Tr2 > : MyTrait1 < Tr2 > {
932+ trait MyTrait2 < Tr2 > : MyTrait1 < Tr2 > + Copy {
933933 #[ rustfmt:: skip]
934- fn m2 ( self ) -> Tr2
934+ fn m2 ( & self ) -> Tr2
935935 where
936936 Self : Sized ,
937937 {
938938 if 3 > 2 { // $ target=gt
939939 self . m1 ( ) // $ target=MyTrait1::m1
940940 } else {
941- Self :: m1 ( self ) // $ target=MyTrait1::m1
941+ Self :: m1 ( * self ) // $ target=deref target=MyTrait1::m1
942942 }
943943 }
944944 }
@@ -952,7 +952,7 @@ mod method_supertraits {
952952 if 3 > 2 { // $ target=gt
953953 self . m2 ( ) . a // $ target=m2 $ fieldof=MyThing
954954 } else {
955- Self :: m2 ( self ) . a // $ target=m2 fieldof=MyThing
955+ Self :: m2 ( & self ) . a // $ target=m2 fieldof=MyThing
956956 }
957957 }
958958 }
@@ -964,7 +964,7 @@ mod method_supertraits {
964964 }
965965 }
966966
967- impl < T > MyTrait2 < T > for MyThing < T > { }
967+ impl < T : Copy > MyTrait2 < T > for MyThing < T > { }
968968
969969 impl < T > MyTrait1 < MyThing < T > > for MyThing2 < T > {
970970 // MyThing2::m1
@@ -973,9 +973,9 @@ mod method_supertraits {
973973 }
974974 }
975975
976- impl < T > MyTrait2 < MyThing < T > > for MyThing2 < T > { }
976+ impl < T : Copy > MyTrait2 < MyThing < T > > for MyThing2 < T > { }
977977
978- impl < T > MyTrait3 < T > for MyThing2 < T > { }
978+ impl < T : Copy > MyTrait3 < T > for MyThing2 < T > { }
979979
980980 fn call_trait_m1 < T1 , T2 : MyTrait1 < T1 > > ( x : T2 ) -> T1 {
981981 x. m1 ( ) // $ target=MyTrait1::m1
@@ -1770,6 +1770,11 @@ mod overloadable_operators {
17701770 self . x >= other. x && self . y >= other. y // $ fieldof=Vec2 target=ge
17711771 }
17721772 }
1773+
1774+ fn param_add < T : Add > ( a : T , b : T ) -> T :: Output {
1775+ a + b // $ target=add
1776+ }
1777+
17731778 pub fn f ( ) {
17741779 // Test for all overloadable operators on `i64`
17751780
@@ -1787,6 +1792,7 @@ mod overloadable_operators {
17871792 let i64_mul = 17i64 * 18i64 ; // $ type=i64_mul:i64 target=mul
17881793 let i64_div = 19i64 / 20i64 ; // $ type=i64_div:i64 target=div
17891794 let i64_rem = 21i64 % 22i64 ; // $ type=i64_rem:i64 target=rem
1795+ let i64_param_add = param_add ( 1i64 , 2i64 ) ; // $ target=param_add $ MISSING: type=i64_param_add:i64
17901796
17911797 // Arithmetic assignment operators
17921798 let mut i64_add_assign = 23i64 ;
@@ -2034,7 +2040,7 @@ mod impl_trait {
20342040mod indexers {
20352041 use std:: ops:: Index ;
20362042
2037- #[ derive( Debug ) ]
2043+ #[ derive( Debug , Copy , Clone ) ]
20382044 struct S ;
20392045
20402046 impl S {
@@ -2071,6 +2077,13 @@ mod indexers {
20712077 let x = slice[ 0 ] . foo ( ) ; // $ target=foo type=x:S target=index
20722078 }
20732079
2080+ fn param_index < T : Index < usize > > ( a : T , b : usize ) -> T :: Output
2081+ where
2082+ <T as Index < usize > >:: Output : Sized + Copy ,
2083+ {
2084+ a[ b] // $ target=index
2085+ }
2086+
20742087 pub fn f ( ) {
20752088 let mut vec = MyVec :: new ( ) ; // $ type=vec:T.S target=new
20762089 vec. push ( S ) ; // $ target=push
@@ -2079,6 +2092,8 @@ mod indexers {
20792092 let xs: [ S ; 1 ] = [ S ] ;
20802093 let x = xs[ 0 ] . foo ( ) ; // $ target=foo type=x:S target=index
20812094
2095+ let y = param_index ( vec, 0 ) ; // $ target=param_index $ MISSING: type=y:S
2096+
20822097 analyze_slice ( & xs) ; // $ target=analyze_slice
20832098 }
20842099}
0 commit comments