// Copyright 2017 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. // 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 = ::method; //~^ ERROR type `for<'r> fn(&'r priv_trait::Pub) {::method}` is private value; //~^ ERROR type `for<'r> fn(&'r priv_trait::Pub) {::method}` is private Pub.method(); //~^ ERROR type `for<'r> fn(&'r Self) {::method}` is private ::CONST; //FIXME ERROR associated constant `path(PrivTr::CONST)` is private let _: ::AssocTy; //~^ ERROR trait `priv_trait::PrivTr` is private //~| ERROR trait `priv_trait::PrivTr` is private pub type InSignatureTy = ::AssocTy; //~^ ERROR trait `priv_trait::PrivTr` is private //~| ERROR trait `path(PrivTr)` is private pub trait InSignatureTr: PrivTr {} //FIXME ERROR trait `priv_trait::PrivTr` is private impl PrivTr for u8 {} //FIXME ERROR trait `priv_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 = ::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(&self) {} } struct Priv; pub struct Pub; impl PubTr for Pub {} pub macro mac() { let value = ::method::; //~^ ERROR type `priv_substs::Priv` is private value; //~^ ERROR type `priv_substs::Priv` is private Pub.method::(); //~^ ERROR type `priv_substs::Priv` is private } } fn priv_substs() { priv_substs::mac!(); } mod priv_parent_substs { pub trait PubTr { fn method(&self) {} const CONST: u8 = 0; type AssocTy = u8; } struct Priv; pub struct Pub; impl PubTr for Pub {} impl PubTr for Priv {} pub macro mac() { let value = ::method; //~^ ERROR type `priv_parent_substs::Priv` is private value; //~^ ERROR type `priv_parent_substs::Priv` is private let value = >::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 = >::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 ::CONST; //~^ ERROR type `priv_parent_substs::Priv` is private >::CONST; //~^ ERROR type `priv_parent_substs::Priv` is private >::CONST; //~^ ERROR type `priv_parent_substs::Priv` is private let _: ::AssocTy; //~^ ERROR type `priv_parent_substs::Priv` is private //~| ERROR type `priv_parent_substs::Priv` is private let _: >::AssocTy; //~^ ERROR type `priv_parent_substs::Priv` is private //~| ERROR type `priv_parent_substs::Priv` is private let _: >::AssocTy; //~^ ERROR type `priv_parent_substs::Priv` is private //~| ERROR type `priv_parent_substs::Priv` is private pub type InSignatureTy1 = ::AssocTy; //~^ ERROR type `priv_parent_substs::Priv` is private pub type InSignatureTy2 = >::AssocTy; //~^ ERROR type `priv_parent_substs::Priv` is private impl PubTr for u8 {} //FIXME ERROR type `priv_parent_substs::Priv` is private } } fn priv_parent_substs() { priv_parent_substs::mac!(); } fn main() {}