diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:02:58 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:02:58 +0000 |
commit | 698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch) | |
tree | 173a775858bd501c378080a10dca74132f05bc50 /src/test/ui/privacy/associated-item-privacy-trait.rs | |
parent | Initial commit. (diff) | |
download | rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip |
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/privacy/associated-item-privacy-trait.rs')
-rw-r--r-- | src/test/ui/privacy/associated-item-privacy-trait.rs | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/src/test/ui/privacy/associated-item-privacy-trait.rs b/src/test/ui/privacy/associated-item-privacy-trait.rs new file mode 100644 index 000000000..c07aeed99 --- /dev/null +++ b/src/test/ui/privacy/associated-item-privacy-trait.rs @@ -0,0 +1,134 @@ +#![feature(decl_macro, associated_type_defaults)] +#![allow(unused, private_in_public)] + +mod priv_trait { + trait PrivTr { + fn method(&self) {} + const CONST: u8 = 0; + type AssocTy = u8; + } + pub struct Pub; + impl PrivTr for Pub {} + pub trait PubTr: PrivTr {} + + pub macro mac() { + let value = <Pub as PrivTr>::method; + //~^ ERROR type `for<'r> fn(&'r priv_trait::Pub) {<priv_trait::Pub as PrivTr>::method}` is private + value; + //~^ ERROR type `for<'r> fn(&'r priv_trait::Pub) {<priv_trait::Pub as PrivTr>::method}` is private + Pub.method(); + //~^ ERROR type `for<'r> fn(&'r Self) {<Self as PrivTr>::method}` is private + <Pub as PrivTr>::CONST; + //~^ ERROR associated constant `<Pub as PrivTr>::CONST` is private + let _: <Pub as PrivTr>::AssocTy; + //~^ ERROR associated type `<Pub as PrivTr>::AssocTy` is private + pub type InSignatureTy = <Pub as PrivTr>::AssocTy; + //~^ ERROR trait `PrivTr` is private + pub trait InSignatureTr: PrivTr {} + //~^ ERROR trait `PrivTr` is private + impl PrivTr for u8 {} + //~^ ERROR trait `PrivTr` is private + } +} +fn priv_trait() { + priv_trait::mac!(); +} + +mod priv_signature { + pub trait PubTr { + fn method(&self, arg: Priv) {} + } + struct Priv; + pub struct Pub; + impl PubTr for Pub {} + + pub macro mac() { + let value = <Pub as PubTr>::method; + //~^ ERROR type `priv_signature::Priv` is private + value; + //~^ ERROR type `priv_signature::Priv` is private + Pub.method(loop {}); + //~^ ERROR type `priv_signature::Priv` is private + } +} +fn priv_signature() { + priv_signature::mac!(); +} + +mod priv_substs { + pub trait PubTr { + fn method<T>(&self) {} + } + struct Priv; + pub struct Pub; + impl PubTr for Pub {} + + pub macro mac() { + let value = <Pub as PubTr>::method::<Priv>; + //~^ ERROR type `priv_substs::Priv` is private + value; + //~^ ERROR type `priv_substs::Priv` is private + Pub.method::<Priv>(); + //~^ ERROR type `priv_substs::Priv` is private + } +} +fn priv_substs() { + priv_substs::mac!(); +} + +mod priv_parent_substs { + pub trait PubTr<T = Priv> { + fn method(&self) {} + const CONST: u8 = 0; + type AssocTy = u8; + } + struct Priv; + pub struct Pub; + impl PubTr<Priv> for Pub {} + impl PubTr<Pub> for Priv {} + + pub macro mac() { + let value = <Pub as PubTr>::method; + //~^ ERROR type `priv_parent_substs::Priv` is private + value; + //~^ ERROR type `priv_parent_substs::Priv` is private + let value = <Pub as PubTr<_>>::method; + //~^ ERROR type `priv_parent_substs::Priv` is private + value; + //~^ ERROR type `priv_parent_substs::Priv` is private + Pub.method(); + //~^ ERROR type `priv_parent_substs::Priv` is private + + let value = <Priv as PubTr<_>>::method; + //~^ ERROR type `priv_parent_substs::Priv` is private + value; + //~^ ERROR type `priv_parent_substs::Priv` is private + Priv.method(); + //~^ ERROR type `priv_parent_substs::Priv` is private + + <Pub as PubTr>::CONST; + //~^ ERROR type `priv_parent_substs::Priv` is private + <Pub as PubTr<_>>::CONST; + //~^ ERROR type `priv_parent_substs::Priv` is private + <Priv as PubTr<_>>::CONST; + //~^ ERROR type `priv_parent_substs::Priv` is private + + let _: <Pub as PubTr>::AssocTy; // FIXME no longer an error?! + let _: <Pub as PubTr<_>>::AssocTy; + //~^ ERROR type `priv_parent_substs::Priv` is private + let _: <Priv as PubTr<_>>::AssocTy; + //~^ ERROR type `priv_parent_substs::Priv` is private + + pub type InSignatureTy1 = <Pub as PubTr>::AssocTy; + //~^ ERROR type `priv_parent_substs::Priv` is private + pub type InSignatureTy2 = <Priv as PubTr<Pub>>::AssocTy; + //~^ ERROR type `priv_parent_substs::Priv` is private + impl PubTr for u8 {} + //~^ ERROR type `priv_parent_substs::Priv` is private + } +} +fn priv_parent_substs() { + priv_parent_substs::mac!(); +} + +fn main() {} |