2017-09-23 12:48:08 -05:00
|
|
|
// ignore-tidy-linelength
|
|
|
|
|
|
|
|
#![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 priv_trait::PrivTr>::method}` is private
|
|
|
|
value;
|
|
|
|
//~^ ERROR type `for<'r> fn(&'r priv_trait::Pub) {<priv_trait::Pub as priv_trait::PrivTr>::method}` is private
|
|
|
|
Pub.method();
|
|
|
|
//~^ ERROR type `for<'r> fn(&'r Self) {<Self as priv_trait::PrivTr>::method}` is private
|
|
|
|
<Pub as PrivTr>::CONST;
|
2020-03-23 16:39:59 -05:00
|
|
|
//~^ ERROR associated constant `<Pub as PrivTr>::CONST` is private
|
2017-09-23 12:48:08 -05:00
|
|
|
let _: <Pub as PrivTr>::AssocTy;
|
2020-03-23 16:39:59 -05:00
|
|
|
//~^ ERROR associated type `<Pub as PrivTr>::AssocTy` is private
|
2017-09-23 12:48:08 -05:00
|
|
|
pub type InSignatureTy = <Pub as PrivTr>::AssocTy;
|
|
|
|
//~^ ERROR trait `priv_trait::PrivTr` is private
|
|
|
|
pub trait InSignatureTr: PrivTr {}
|
2017-11-18 09:49:37 -06:00
|
|
|
//~^ ERROR trait `priv_trait::PrivTr` is private
|
2017-09-23 12:48:08 -05:00
|
|
|
impl PrivTr for u8 {}
|
2017-11-18 09:49:37 -06:00
|
|
|
//~^ ERROR trait `priv_trait::PrivTr` is private
|
2017-09-23 12:48:08 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
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
|
|
|
|
|
2020-03-23 16:39:59 -05:00
|
|
|
let _: <Pub as PubTr>::AssocTy; // FIXME no longer an error?!
|
2017-09-23 12:48:08 -05:00
|
|
|
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 {}
|
2017-11-18 09:49:37 -06:00
|
|
|
//~^ ERROR type `priv_parent_substs::Priv` is private
|
2017-09-23 12:48:08 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
fn priv_parent_substs() {
|
|
|
|
priv_parent_substs::mac!();
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {}
|