@@ -1099,6 +1099,7 @@ mod method_call_type_conversion {
10991099 println ! ( "{:?}" , x5. 0 ) ; // $ fieldof=S
11001100
11011101 let x6 = & S ( S2 ) ; // $ SPURIOUS: type=x6:&T.&T.S
1102+
11021103 // explicit dereference
11031104 println ! ( "{:?}" , ( * x6) . m1( ) ) ; // $ method=m1 method=deref
11041105
@@ -1663,17 +1664,18 @@ mod async_ {
16631664 }
16641665
16651666 fn f2 ( ) -> impl Future < Output = S1 > {
1666- async {
1667- S1
1668- }
1667+ async { S1 }
16691668 }
16701669
16711670 struct S2 ;
16721671
16731672 impl Future for S2 {
16741673 type Output = S1 ;
16751674
1676- fn poll ( self : std:: pin:: Pin < & mut Self > , _cx : & mut std:: task:: Context < ' _ > ) -> std:: task:: Poll < Self :: Output > {
1675+ fn poll (
1676+ self : std:: pin:: Pin < & mut Self > ,
1677+ _cx : & mut std:: task:: Context < ' _ > ,
1678+ ) -> std:: task:: Poll < Self :: Output > {
16771679 std:: task:: Poll :: Ready ( S1 )
16781680 }
16791681 }
@@ -1687,14 +1689,11 @@ mod async_ {
16871689 f2 ( ) . await . f ( ) ; // $ method=S1f
16881690 f3 ( ) . await . f ( ) ; // $ method=S1f
16891691 S2 . await . f ( ) ; // $ method=S1f
1690- let b = async {
1691- S1
1692- } ;
1692+ let b = async { S1 } ;
16931693 b. await . f ( ) ; // $ method=S1f
16941694 }
16951695}
16961696
1697-
16981697mod impl_trait {
16991698 struct S1 ;
17001699 struct S2 ;
@@ -1805,6 +1804,44 @@ mod indexers {
18051804 }
18061805}
18071806
1807+ mod method_determined_by_argument_type {
1808+ trait MyAdd < T > {
1809+ fn my_add ( & self , value : T ) -> Self ;
1810+ }
1811+
1812+ impl MyAdd < i64 > for i64 {
1813+ // MyAdd<i64>::my_add
1814+ fn my_add ( & self , value : i64 ) -> Self {
1815+ value
1816+ }
1817+ }
1818+
1819+ impl MyAdd < & i64 > for i64 {
1820+ // MyAdd<&i64>::my_add
1821+ fn my_add ( & self , value : & i64 ) -> Self {
1822+ * value // $ method=deref
1823+ }
1824+ }
1825+
1826+ impl MyAdd < bool > for i64 {
1827+ // MyAdd<bool>::my_add
1828+ fn my_add ( & self , value : bool ) -> Self {
1829+ if value {
1830+ 1
1831+ } else {
1832+ 0
1833+ }
1834+ }
1835+ }
1836+
1837+ pub fn f ( ) {
1838+ let x: i64 = 73 ;
1839+ x. my_add ( 5i64 ) ; // $ method=MyAdd<i64>::my_add SPURIOUS: method=MyAdd<bool>::my_add SPURIOUS: method=MyAdd<&i64>::my_add
1840+ x. my_add ( & 5i64 ) ; // $ method=MyAdd<&i64>::my_add SPURIOUS: method=MyAdd<i64>::my_add SPURIOUS: method=MyAdd<bool>::my_add
1841+ x. my_add ( true ) ; // $ method=MyAdd<bool>::my_add SPURIOUS: method=MyAdd<i64>::my_add SPURIOUS: method=MyAdd<&i64>::my_add
1842+ }
1843+ }
1844+
18081845fn main ( ) {
18091846 field_access:: f ( ) ;
18101847 method_impl:: f ( ) ;
@@ -1827,4 +1864,5 @@ fn main() {
18271864 async_:: f ( ) ;
18281865 impl_trait:: f ( ) ;
18291866 indexers:: f ( ) ;
1867+ method_determined_by_argument_type:: f ( ) ;
18301868}
0 commit comments