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