@@ -23,7 +23,7 @@ fn infer_block_expr_type_mismatch() {
23
23
#[ test]
24
24
fn coerce_places ( ) {
25
25
check_infer (
26
- r"
26
+ r# "
27
27
struct S<T> { a: T }
28
28
29
29
fn f<T>(_: &[T]) -> T { loop {} }
@@ -45,7 +45,17 @@ fn coerce_places() {
45
45
let f: [&[_]; 2] = [arr; 2];
46
46
let g: (&[_], &[_]) = (arr, arr);
47
47
}
48
- " ,
48
+
49
+ #[lang = "sized"]
50
+ pub trait Sized {}
51
+ #[lang = "unsize"]
52
+ pub trait Unsize<T: ?Sized> {}
53
+ #[lang = "coerce_unsized"]
54
+ pub trait CoerceUnsized<T> {}
55
+
56
+ impl<'a, 'b: 'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<&'a U> for &'b T {}
57
+ impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*mut U> for *mut T {}
58
+ "# ,
49
59
expect ! [ [ r"
50
60
30..31 '_': &[T]
51
61
44..55 '{ loop {} }': T
@@ -121,7 +131,7 @@ fn infer_let_stmt_coerce() {
121
131
#[ test]
122
132
fn infer_custom_coerce_unsized ( ) {
123
133
check_infer (
124
- r"
134
+ r# "
125
135
struct A<T: ?Sized>(*const T);
126
136
struct B<T: ?Sized>(*const T);
127
137
struct C<T: ?Sized> { inner: *const T }
@@ -138,7 +148,18 @@ fn infer_custom_coerce_unsized() {
138
148
let e = foo2(b);
139
149
let f = foo3(c);
140
150
}
141
- " ,
151
+
152
+
153
+ #[lang = "sized"]
154
+ pub trait Sized {}
155
+ #[lang = "unsize"]
156
+ pub trait Unsize<T: ?Sized> {}
157
+ #[lang = "coerce_unsized"]
158
+ pub trait CoerceUnsized<T> {}
159
+
160
+ impl<'a, 'b: 'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<&'a U> for &'b T {}
161
+ impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*mut U> for *mut T {}
162
+ "# ,
142
163
expect ! [ [ r"
143
164
257..258 'x': A<[T]>
144
165
278..283 '{ x }': A<[T]>
@@ -172,7 +193,7 @@ fn infer_custom_coerce_unsized() {
172
193
#[ test]
173
194
fn infer_if_coerce ( ) {
174
195
check_infer (
175
- r"
196
+ r# "
176
197
fn foo<T>(x: &[T]) -> &[T] { loop {} }
177
198
fn test() {
178
199
let x = if true {
@@ -181,7 +202,13 @@ fn infer_if_coerce() {
181
202
&[1]
182
203
};
183
204
}
184
- " ,
205
+
206
+
207
+ #[lang = "sized"]
208
+ pub trait Sized {}
209
+ #[lang = "unsize"]
210
+ pub trait Unsize<T: ?Sized> {}
211
+ "# ,
185
212
expect ! [ [ r"
186
213
10..11 'x': &[T]
187
214
27..38 '{ loop {} }': &[T]
@@ -208,7 +235,7 @@ fn infer_if_coerce() {
208
235
#[ test]
209
236
fn infer_if_else_coerce ( ) {
210
237
check_infer (
211
- r"
238
+ r# "
212
239
fn foo<T>(x: &[T]) -> &[T] { loop {} }
213
240
fn test() {
214
241
let x = if true {
@@ -217,7 +244,17 @@ fn infer_if_else_coerce() {
217
244
foo(&[1])
218
245
};
219
246
}
220
- " ,
247
+
248
+ #[lang = "sized"]
249
+ pub trait Sized {}
250
+ #[lang = "unsize"]
251
+ pub trait Unsize<T: ?Sized> {}
252
+ #[lang = "coerce_unsized"]
253
+ pub trait CoerceUnsized<T> {}
254
+
255
+ impl<'a, 'b: 'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<&'a U> for &'b T {}
256
+ impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*mut U> for *mut T {}
257
+ "# ,
221
258
expect ! [ [ r"
222
259
10..11 'x': &[T]
223
260
27..38 '{ loop {} }': &[T]
@@ -244,7 +281,7 @@ fn infer_if_else_coerce() {
244
281
#[ test]
245
282
fn infer_match_first_coerce ( ) {
246
283
check_infer (
247
- r"
284
+ r# "
248
285
fn foo<T>(x: &[T]) -> &[T] { loop {} }
249
286
fn test(i: i32) {
250
287
let x = match i {
@@ -253,7 +290,12 @@ fn infer_match_first_coerce() {
253
290
_ => &[3],
254
291
};
255
292
}
256
- " ,
293
+
294
+ #[lang = "sized"]
295
+ pub trait Sized {}
296
+ #[lang = "unsize"]
297
+ pub trait Unsize<T: ?Sized> {}
298
+ "# ,
257
299
expect ! [ [ r"
258
300
10..11 'x': &[T]
259
301
27..38 '{ loop {} }': &[T]
@@ -287,7 +329,7 @@ fn infer_match_first_coerce() {
287
329
#[ test]
288
330
fn infer_match_second_coerce ( ) {
289
331
check_infer (
290
- r"
332
+ r# "
291
333
fn foo<T>(x: &[T]) -> &[T] { loop {} }
292
334
fn test(i: i32) {
293
335
let x = match i {
@@ -296,7 +338,17 @@ fn infer_match_second_coerce() {
296
338
_ => &[3],
297
339
};
298
340
}
299
- " ,
341
+
342
+ #[lang = "sized"]
343
+ pub trait Sized {}
344
+ #[lang = "unsize"]
345
+ pub trait Unsize<T: ?Sized> {}
346
+ #[lang = "coerce_unsized"]
347
+ pub trait CoerceUnsized<T> {}
348
+
349
+ impl<'a, 'b: 'a, T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<&'a U> for &'b T {}
350
+ impl<T: ?Sized + Unsize<U>, U: ?Sized> CoerceUnsized<*mut U> for *mut T {}
351
+ "# ,
300
352
expect ! [ [ r"
301
353
10..11 'x': &[T]
302
354
27..38 '{ loop {} }': &[T]
0 commit comments