Skip to content

Commit

Permalink
add tests for metadata for unsized generics and opaques
Browse files Browse the repository at this point in the history
  • Loading branch information
compiler-errors committed Mar 4, 2022
1 parent 1d834cb commit 210e829
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
22 changes: 22 additions & 0 deletions src/test/ui/traits/pointee-tail-is-generic-errors.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// edition:2018

#![feature(ptr_metadata)]
#![feature(type_alias_impl_trait)]

type Opaque = impl std::fmt::Debug + ?Sized;

fn opaque() -> &'static Opaque {
&[1] as &[i32]
}

fn a<T: ?Sized>() {
is_thin::<T>();
//~^ ERROR type mismatch resolving `<T as Pointee>::Metadata == ()`

is_thin::<Opaque>();
//~^ ERROR type mismatch resolving `<impl Debug + ?Sized as Pointee>::Metadata == ()`
}

fn is_thin<T: std::ptr::Pointee<Metadata = ()> + ?Sized>() {}

fn main() {}
40 changes: 40 additions & 0 deletions src/test/ui/traits/pointee-tail-is-generic-errors.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
error[E0271]: type mismatch resolving `<T as Pointee>::Metadata == ()`
--> $DIR/pointee-tail-is-generic-errors.rs:13:5
|
LL | is_thin::<T>();
| ^^^^^^^^^^^^ expected `()`, found associated type
|
= note: expected unit type `()`
found associated type `<T as Pointee>::Metadata`
= help: consider constraining the associated type `<T as Pointee>::Metadata` to `()`
= note: for more information, visit https://doc.rust-lang.org/book/ch19-03-advanced-traits.html
note: required by a bound in `is_thin`
--> $DIR/pointee-tail-is-generic-errors.rs:20:33
|
LL | fn is_thin<T: std::ptr::Pointee<Metadata = ()> + ?Sized>() {}
| ^^^^^^^^^^^^^ required by this bound in `is_thin`

error[E0271]: type mismatch resolving `<impl Debug + ?Sized as Pointee>::Metadata == ()`
--> $DIR/pointee-tail-is-generic-errors.rs:16:5
|
LL | type Opaque = impl std::fmt::Debug + ?Sized;
| ----------------------------- the found opaque type
...
LL | is_thin::<Opaque>();
| ^^^^^^^^^^^^^^^^^ expected `()`, found associated type
|
= note: expected unit type `()`
found associated type `<impl Debug + ?Sized as Pointee>::Metadata`
note: required by a bound in `is_thin`
--> $DIR/pointee-tail-is-generic-errors.rs:20:33
|
LL | fn is_thin<T: std::ptr::Pointee<Metadata = ()> + ?Sized>() {}
| ^^^^^^^^^^^^^ required by this bound in `is_thin`
help: consider constraining the associated type `<impl Debug + ?Sized as Pointee>::Metadata` to `()`
|
LL | type Opaque = impl std::fmt::Debug<Metadata = ()> + ?Sized;
| +++++++++++++++

error: aborting due to 2 previous errors

For more information about this error, try `rustc --explain E0271`.

0 comments on commit 210e829

Please sign in to comment.