Rollup merge of #106676 - oli-obk:tait_test, r=dtolnay
Test that we cannot use trait impl methods arguments as defining uses Addresses https://github.com/rust-lang/rust/issues/63063#issuecomment-1360053614 r? `@dtolnay`
This commit is contained in:
commit
d42d952afc
24
tests/ui/type-alias-impl-trait/unnameable_type.rs
Normal file
24
tests/ui/type-alias-impl-trait/unnameable_type.rs
Normal file
@ -0,0 +1,24 @@
|
||||
#![feature(type_alias_impl_trait)]
|
||||
|
||||
// This test ensures that unnameable types stay unnameable
|
||||
// https://github.com/rust-lang/rust/issues/63063#issuecomment-1360053614
|
||||
|
||||
// library
|
||||
mod private {
|
||||
pub struct Private;
|
||||
pub trait Trait {
|
||||
fn dont_define_this(_private: Private) {}
|
||||
}
|
||||
}
|
||||
|
||||
use private::Trait;
|
||||
|
||||
// downstream
|
||||
type MyPrivate = impl Sized;
|
||||
//~^ ERROR: unconstrained opaque type
|
||||
impl Trait for u32 {
|
||||
fn dont_define_this(_private: MyPrivate) {}
|
||||
//~^ ERROR: incompatible type for trait
|
||||
}
|
||||
|
||||
fn main() {}
|
31
tests/ui/type-alias-impl-trait/unnameable_type.stderr
Normal file
31
tests/ui/type-alias-impl-trait/unnameable_type.stderr
Normal file
@ -0,0 +1,31 @@
|
||||
error: unconstrained opaque type
|
||||
--> $DIR/unnameable_type.rs:17:18
|
||||
|
|
||||
LL | type MyPrivate = impl Sized;
|
||||
| ^^^^^^^^^^
|
||||
|
|
||||
= note: `MyPrivate` must be used in combination with a concrete type within the same module
|
||||
|
||||
error[E0053]: method `dont_define_this` has an incompatible type for trait
|
||||
--> $DIR/unnameable_type.rs:20:35
|
||||
|
|
||||
LL | type MyPrivate = impl Sized;
|
||||
| ---------- the found opaque type
|
||||
...
|
||||
LL | fn dont_define_this(_private: MyPrivate) {}
|
||||
| ^^^^^^^^^
|
||||
| |
|
||||
| expected struct `Private`, found opaque type
|
||||
| help: change the parameter type to match the trait: `Private`
|
||||
|
|
||||
note: type in trait
|
||||
--> $DIR/unnameable_type.rs:10:39
|
||||
|
|
||||
LL | fn dont_define_this(_private: Private) {}
|
||||
| ^^^^^^^
|
||||
= note: expected signature `fn(Private)`
|
||||
found signature `fn(MyPrivate)`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0053`.
|
Loading…
Reference in New Issue
Block a user