@@ -2042,6 +2042,80 @@ mod method_determined_by_argument_type {
20422042 }
20432043 }
20442044
2045+ trait MyFrom < T > {
2046+ // MyFrom::my_from
2047+ fn my_from ( value : T ) -> Self ;
2048+ }
2049+
2050+ impl MyFrom < i64 > for i64 {
2051+ // MyFrom<i64>::my_from
2052+ fn my_from ( value : i64 ) -> Self {
2053+ value
2054+ }
2055+ }
2056+
2057+ impl MyFrom < bool > for i64 {
2058+ // MyFrom<bool>::my_from
2059+ fn my_from ( value : bool ) -> Self {
2060+ if value { 1 } else { 0 }
2061+ }
2062+ }
2063+
2064+ trait MyFrom2 < T > {
2065+ // MyFrom2::my_from2
2066+ fn my_from2 ( value : T , x : Self ) -> ( ) ;
2067+ }
2068+
2069+ impl MyFrom2 < i64 > for i64 {
2070+ // MyFrom2<i64>::my_from2
2071+ fn my_from2 ( value : i64 , _: Self ) -> ( ) {
2072+ value;
2073+ }
2074+ }
2075+
2076+ impl MyFrom2 < bool > for i64 {
2077+ // MyFrom2<bool>::my_from2
2078+ fn my_from2 ( value : bool , _: Self ) -> ( ) {
2079+ if value {
2080+ 1
2081+ } else {
2082+ 0
2083+ } ;
2084+ }
2085+ }
2086+
2087+ trait MySelfTrait {
2088+ // MySelfTrait::f1
2089+ fn f1 ( x : Self ) -> i64 ;
2090+
2091+ // MySelfTrait::f2
2092+ fn f2 ( x : Self ) -> Self ;
2093+ }
2094+
2095+ impl MySelfTrait for i64 {
2096+ // MySelfTrait<i64>::f1
2097+ fn f1 ( x : Self ) -> i64 {
2098+ x + 1
2099+ }
2100+
2101+ // MySelfTrait<i64>::f2
2102+ fn f2 ( x : Self ) -> Self {
2103+ x + 1
2104+ }
2105+ }
2106+
2107+ impl MySelfTrait for bool {
2108+ // MySelfTrait<bool>::f1
2109+ fn f1 ( x : Self ) -> i64 {
2110+ 0
2111+ }
2112+
2113+ // MySelfTrait<bool>::f2
2114+ fn f2 ( x : Self ) -> Self {
2115+ x
2116+ }
2117+ }
2118+
20452119 pub fn f ( ) {
20462120 let x: i64 = 73 ;
20472121 x. my_add ( 5i64 ) ; // $ method=MyAdd<i64>::my_add
@@ -2051,6 +2125,22 @@ mod method_determined_by_argument_type {
20512125 S ( 1i64 ) . my_add ( S ( 2i64 ) ) ; // $ method=S::my_add1
20522126 S ( 1i64 ) . my_add ( 3i64 ) ; // $ MISSING: method=S::my_add2
20532127 S ( 1i64 ) . my_add ( & 3i64 ) ; // $ method=S::my_add3
2128+
2129+ let x = i64:: my_from ( 73i64 ) ; // $ method=MyFrom<i64>::my_from $ SPURIOUS: method=MyFrom<bool>::my_from
2130+ let y = i64:: my_from ( true ) ; // $ method=MyFrom<bool>::my_from $ SPURIOUS: method=MyFrom<i64>::my_from
2131+ let z: i64 = MyFrom :: my_from ( 73i64 ) ; // $ MISSING: method=MyFrom<i64>::my_from $ SPURIOUS: method=MyFrom::my_from
2132+ i64:: my_from2 ( 73i64 , 0i64 ) ; // $ method=MyFrom2<i64>::my_from2 $ SPURIOUS: method=MyFrom2<bool>::my_from2
2133+ i64:: my_from2 ( true , 0i64 ) ; // $ method=MyFrom2<bool>::my_from2 $ SPURIOUS: method=MyFrom2<i64>::my_from2
2134+ MyFrom2 :: my_from2 ( 73i64 , 0i64 ) ; // $ MISSING: method=MyFrom2<i64>::my_from2 $ SPURIOUS: method=MyFrom2::my_from2
2135+
2136+ i64:: f1 ( 73i64 ) ; // $ method=MySelfTrait<i64>::f1
2137+ i64:: f2 ( 73i64 ) ; // $ method=MySelfTrait<i64>::f2
2138+ bool:: f1 ( true ) ; // $ method=MySelfTrait<bool>::f1
2139+ bool:: f2 ( true ) ; // $ method=MySelfTrait<bool>::f2
2140+ MySelfTrait :: f1 ( 73i64 ) ; // $ SPURIOUS method=MySelfTrait::f1 MISSING: method=MySelfTrait<i64>::f1
2141+ MySelfTrait :: f2 ( 73i64 ) ; // $ SPURIOUS method=MySelfTrait::f2 MISSING: method=MySelfTrait<i64>::f2
2142+ MySelfTrait :: f1 ( true ) ; // $ SPURIOUS method=MySelfTrait::f1 MISSING: method=MySelfTrait<bool>::f1
2143+ MySelfTrait :: f2 ( true ) ; // $ SPURIOUS method=MySelfTrait::f2 MISSING: method=MySelfTrait<bool>::f2
20542144 }
20552145}
20562146
0 commit comments