@@ -25,6 +25,32 @@ trait X {
25
25
fn hoy2 ( ) -> u8 { 45 }
26
26
}
27
27
28
+ trait F < U > {
29
+ fn f ( self , other : U ) -> u64 ;
30
+ }
31
+
32
+ impl F < u32 > for u32 {
33
+ fn f ( self , other : u32 ) -> u64 { self as u64 + other as u64 }
34
+ }
35
+
36
+ impl F < u64 > for u32 {
37
+ fn f ( self , other : u64 ) -> u64 { self as u64 - other }
38
+ }
39
+
40
+ impl F < u64 > for u64 {
41
+ fn f ( self , other : u64 ) -> u64 { self * other }
42
+ }
43
+
44
+ impl F < u32 > for u64 {
45
+ fn f ( self , other : u32 ) -> u64 { self ^ other as u64 }
46
+ }
47
+
48
+ trait T < I , O > {
49
+ fn staticmeth ( i : I , o : O ) -> ( I , O ) { ( i, o) }
50
+ }
51
+
52
+ impl < I , O > T < I , O > for O { }
53
+
28
54
impl X for S { }
29
55
30
56
enum E {
@@ -33,6 +59,7 @@ enum E {
33
59
34
60
const C : u8 = 84 ;
35
61
const C2 : [ u8 ; 5 ] = [ 42 ; 5 ] ;
62
+ const C3 : [ u8 ; 3 ] = [ 42 , 41 , 40 ] ;
36
63
37
64
fn regular ( ) -> u8 {
38
65
21
@@ -108,6 +135,11 @@ fn t13() -> [u8; 5] {
108
135
C2
109
136
}
110
137
138
+ #[ rustc_mir]
139
+ fn t13_2 ( ) -> [ u8 ; 3 ] {
140
+ C3
141
+ }
142
+
111
143
#[ rustc_mir]
112
144
fn t14 ( ) -> fn ( ) -> u8 {
113
145
<S as X >:: hoy2
@@ -118,6 +150,31 @@ fn t15() -> fn(&S)-> u8 {
118
150
S :: hey2
119
151
}
120
152
153
+ #[ rustc_mir]
154
+ fn t16 ( ) -> fn ( u32 , u32 ) ->u64 {
155
+ F :: f
156
+ }
157
+
158
+ #[ rustc_mir]
159
+ fn t17 ( ) -> fn ( u32 , u64 ) ->u64 {
160
+ F :: f
161
+ }
162
+
163
+ #[ rustc_mir]
164
+ fn t18 ( ) -> fn ( u64 , u64 ) ->u64 {
165
+ F :: f
166
+ }
167
+
168
+ #[ rustc_mir]
169
+ fn t19 ( ) -> fn ( u64 , u32 ) ->u64 {
170
+ F :: f
171
+ }
172
+
173
+ #[ rustc_mir]
174
+ fn t20 ( ) -> fn ( u64 , u32 ) ->( u64 , u32 ) {
175
+ <u32 as T < _ , _ > >:: staticmeth
176
+ }
177
+
121
178
fn main ( ) {
122
179
unsafe {
123
180
assert_eq ! ( t1( ) ( ) , regular( ) ) ;
@@ -148,8 +205,14 @@ fn main(){
148
205
149
206
assert_eq ! ( t12( ) , C ) ;
150
207
assert_eq ! ( t13( ) , C2 ) ;
208
+ assert_eq ! ( t13_2( ) , C3 ) ;
151
209
152
210
assert_eq ! ( t14( ) ( ) , <S as X >:: hoy2( ) ) ;
153
211
assert_eq ! ( t15( ) ( & s) , S :: hey2( & s) ) ;
212
+ assert_eq ! ( t16( ) ( 10u32 , 20u32 ) , F :: f( 10u32 , 20u32 ) ) ;
213
+ assert_eq ! ( t17( ) ( 30u32 , 10u64 ) , F :: f( 30u32 , 10u64 ) ) ;
214
+ assert_eq ! ( t18( ) ( 50u64 , 5u64 ) , F :: f( 50u64 , 5u64 ) ) ;
215
+ assert_eq ! ( t19( ) ( 322u64 , 2u32 ) , F :: f( 322u64 , 2u32 ) ) ;
216
+ assert_eq ! ( t20( ) ( 123u64 , 38u32 ) , <u32 as T <_, _>>:: staticmeth( 123 , 38 ) ) ;
154
217
}
155
218
}
0 commit comments