Skip to content

Commit f3590d7

Browse files
committed
moved renamed docs stderr formatted | destructure-trait-ref.rs
1 parent d0a307b commit f3590d7

File tree

3 files changed

+35
-52
lines changed

3 files changed

+35
-52
lines changed

tests/ui/destructure-trait-ref.rs

Lines changed: 0 additions & 46 deletions
This file was deleted.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
//! Regression test for destructuring trait references (`&dyn T`/`Box<dyn T>`).
2+
//! Checks cases where number of `&`/`Box` patterns (n) matches/doesn't match references (m).
3+
//!
4+
//! Issue: https://github.com/rust-lang/rust/issues/15031
5+
6+
#![feature(box_patterns)]
7+
8+
trait T {
9+
fn foo(&self) {}
10+
}
11+
12+
impl T for isize {}
13+
14+
fn main() {
15+
// Valid cases: n < m (can dereference)
16+
let &x = &(&1isize as &dyn T);
17+
let &x = &&(&1isize as &dyn T);
18+
let &&x = &&(&1isize as &dyn T);
19+
20+
// Error cases: n == m (cannot dereference trait object)
21+
let &x = &1isize as &dyn T; //~ ERROR type `&dyn T` cannot be dereferenced
22+
let &&x = &(&1isize as &dyn T); //~ ERROR type `&dyn T` cannot be dereferenced
23+
let box x = Box::new(1isize) as Box<dyn T>; //~ ERROR type `Box<dyn T>` cannot be dereferenced
24+
25+
// Error cases: n > m (type mismatch)
26+
let &&x = &1isize as &dyn T; //~ ERROR mismatched types
27+
let &&&x = &(&1isize as &dyn T); //~ ERROR mismatched types
28+
let box box x = Box::new(1isize) as Box<dyn T>; //~ ERROR mismatched types
29+
}

tests/ui/destructure-trait-ref.stderr renamed to tests/ui/traits/trait-object-destructure.stderr

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
error[E0033]: type `&dyn T` cannot be dereferenced
2-
--> $DIR/destructure-trait-ref.rs:28:9
2+
--> $DIR/trait-object-destructure.rs:21:9
33
|
44
LL | let &x = &1isize as &dyn T;
55
| ^^ type `&dyn T` cannot be dereferenced
66

77
error[E0033]: type `&dyn T` cannot be dereferenced
8-
--> $DIR/destructure-trait-ref.rs:29:10
8+
--> $DIR/trait-object-destructure.rs:22:10
99
|
1010
LL | let &&x = &(&1isize as &dyn T);
1111
| ^^ type `&dyn T` cannot be dereferenced
1212

1313
error[E0033]: type `Box<dyn T>` cannot be dereferenced
14-
--> $DIR/destructure-trait-ref.rs:30:9
14+
--> $DIR/trait-object-destructure.rs:23:9
1515
|
1616
LL | let box x = Box::new(1isize) as Box<dyn T>;
1717
| ^^^^^ type `Box<dyn T>` cannot be dereferenced
1818

1919
error[E0308]: mismatched types
20-
--> $DIR/destructure-trait-ref.rs:34:10
20+
--> $DIR/trait-object-destructure.rs:26:10
2121
|
2222
LL | let &&x = &1isize as &dyn T;
2323
| ^^ ----------------- this expression has type `&dyn T`
@@ -33,7 +33,7 @@ LL + let &x = &1isize as &dyn T;
3333
|
3434

3535
error[E0308]: mismatched types
36-
--> $DIR/destructure-trait-ref.rs:38:11
36+
--> $DIR/trait-object-destructure.rs:27:11
3737
|
3838
LL | let &&&x = &(&1isize as &dyn T);
3939
| ^^ -------------------- this expression has type `&&dyn T`
@@ -49,7 +49,7 @@ LL + let &&x = &(&1isize as &dyn T);
4949
|
5050

5151
error[E0308]: mismatched types
52-
--> $DIR/destructure-trait-ref.rs:42:13
52+
--> $DIR/trait-object-destructure.rs:28:13
5353
|
5454
LL | let box box x = Box::new(1isize) as Box<dyn T>;
5555
| ^^^^^ ------------------------------ this expression has type `Box<dyn T>`

0 commit comments

Comments
 (0)