diff options
| author | lcnr <rust@lcnr.de> | 2021-08-26 12:57:42 +0200 |
|---|---|---|
| committer | lcnr <rust@lcnr.de> | 2021-08-26 12:57:42 +0200 |
| commit | bee13d18af34ce6056a0b76fb7652cafda52cb69 (patch) | |
| tree | 7da5d2ea1d0042962e45b1c81b9171f09f3e82a3 | |
| parent | 76e755cf4afc34af586948e7bc25d2f1c589a884 (diff) | |
| download | rust-bee13d18af34ce6056a0b76fb7652cafda52cb69.tar.gz rust-bee13d18af34ce6056a0b76fb7652cafda52cb69.zip | |
add unsized coercion test
| -rw-r--r-- | src/test/ui/unsized/param-mentioned-by-different-field.rs | 10 | ||||
| -rw-r--r-- | src/test/ui/unsized/param-mentioned-by-different-field.stderr | 14 |
2 files changed, 24 insertions, 0 deletions
diff --git a/src/test/ui/unsized/param-mentioned-by-different-field.rs b/src/test/ui/unsized/param-mentioned-by-different-field.rs new file mode 100644 index 00000000000..cda94b306d3 --- /dev/null +++ b/src/test/ui/unsized/param-mentioned-by-different-field.rs @@ -0,0 +1,10 @@ +// We must not allow this with our current setup as `T` +// is mentioned both in the tail of `Foo` and by another +// field. +struct Foo<T: ?Sized>(Box<T>, T); + +fn main() { + let x: Foo<[u8; 1]> = Foo(Box::new([2]), [3]); + let y: &Foo<[u8]> = &x; //~ ERROR mismatched types + assert_eq!(y.0.len(), 1); +} diff --git a/src/test/ui/unsized/param-mentioned-by-different-field.stderr b/src/test/ui/unsized/param-mentioned-by-different-field.stderr new file mode 100644 index 00000000000..d18fa6456f3 --- /dev/null +++ b/src/test/ui/unsized/param-mentioned-by-different-field.stderr @@ -0,0 +1,14 @@ +error[E0308]: mismatched types + --> $DIR/param-mentioned-by-different-field.rs:8:25 + | +LL | let y: &Foo<[u8]> = &x; + | ---------- ^^ expected slice `[u8]`, found array `[u8; 1]` + | | + | expected due to this + | + = note: expected reference `&Foo<[u8]>` + found reference `&Foo<[u8; 1]>` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0308`. |
