mirror of
https://github.com/rust-lang/rust.git
synced 2025-12-02 18:48:00 +00:00
178 lines
6.4 KiB
Rust
178 lines
6.4 KiB
Rust
//@ aux-crate:priv:priv_dep=priv_dep.rs
|
|
//@ aux-build:pub_dep.rs
|
|
//@ aux-crate:priv:pm=pm.rs
|
|
//@ compile-flags: -Zunstable-options
|
|
|
|
// Basic behavior check of exported_private_dependencies from either a public
|
|
// dependency or a private one.
|
|
|
|
#![deny(exported_private_dependencies)]
|
|
|
|
// This crate is a private dependency
|
|
pub extern crate priv_dep;
|
|
//~^ ERROR crate `priv_dep` from private dependency 'priv_dep' is re-exported
|
|
// This crate is a public dependency
|
|
pub extern crate pub_dep;
|
|
// This crate is a private dependency
|
|
extern crate pm;
|
|
|
|
use priv_dep::{OtherTrait, OtherType};
|
|
use pub_dep::PubType;
|
|
|
|
// Type from private dependency used in private
|
|
// type - this is fine
|
|
struct PrivateType {
|
|
field: OtherType,
|
|
}
|
|
|
|
pub struct PublicType {
|
|
pub field: OtherType,
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
priv_field: OtherType, // Private field - this is fine
|
|
pub other_field: PubType, // Type from public dependency - this is fine
|
|
}
|
|
|
|
pub struct PublicTuple(
|
|
pub OtherType,
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface [exported_private_dependencies]
|
|
OtherType,
|
|
pub PubType,
|
|
);
|
|
|
|
pub enum PublicEnum {
|
|
OtherType,
|
|
ActualOtherType(OtherType, PubType),
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface [exported_private_dependencies]
|
|
ActualOtherTypeStruct {
|
|
field: OtherType,
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface [exported_private_dependencies]
|
|
other_field: PubType,
|
|
},
|
|
}
|
|
|
|
pub struct PublicGenericType<T, U>(pub T, U);
|
|
pub type ReexportedPublicGeneric = PublicGenericType<OtherType, ()>;
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
pub type ReexportedPrivateGeneric = PublicGenericType<(), OtherType>;
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
|
|
pub struct PublicGenericBoundedType<T: OtherTrait>(T);
|
|
//~^ ERROR trait `OtherTrait` from private dependency 'priv_dep' in public interface
|
|
|
|
impl PublicType {
|
|
pub fn pub_fn_param(param: OtherType) {}
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
|
|
pub fn pub_fn_return() -> OtherType { OtherType }
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
|
|
fn priv_fn(param: OtherType) {}
|
|
}
|
|
|
|
pub trait MyPubTrait {
|
|
type Foo: OtherTrait;
|
|
//~^ ERROR trait `OtherTrait` from private dependency 'priv_dep' in public interface
|
|
|
|
fn required_impl_trait() -> impl OtherTrait;
|
|
|
|
fn provided_impl_trait() -> impl OtherTrait { OtherType }
|
|
|
|
fn required_concrete() -> OtherType;
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
|
|
fn provided_concrete() -> OtherType { OtherType }
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
}
|
|
|
|
pub trait WithSuperTrait: OtherTrait {}
|
|
//~^ ERROR trait `OtherTrait` from private dependency 'priv_dep' in public interface
|
|
|
|
pub trait PubLocalTraitWithAssoc {
|
|
type X;
|
|
}
|
|
|
|
pub struct PrivateAssoc;
|
|
impl PubLocalTraitWithAssoc for PrivateAssoc {
|
|
type X = OtherType;
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
}
|
|
|
|
pub fn in_bounds<T: OtherTrait>(x: T) { unimplemented!() }
|
|
//~^ ERROR trait `OtherTrait` from private dependency 'priv_dep' in public interface
|
|
|
|
pub fn private_return_impl_trait() -> impl OtherTrait { OtherType }
|
|
//~^ ERROR trait `OtherTrait` from private dependency 'priv_dep' in public interface
|
|
|
|
pub fn private_return() -> OtherType { OtherType }
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
|
|
pub fn private_in_generic() -> std::num::Saturating<OtherType> { unimplemented!() }
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
|
|
pub static STATIC: OtherType = OtherType;
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
|
|
pub const CONST: OtherType = OtherType;
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
|
|
pub type Alias = OtherType;
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
|
|
pub type AliasOfAlias = priv_dep::PubPub;
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
|
|
pub struct PublicWithPrivateImpl;
|
|
|
|
impl OtherTrait for PublicWithPrivateImpl {}
|
|
//~^ ERROR trait `OtherTrait` from private dependency 'priv_dep' in public interface
|
|
|
|
pub trait PubTraitOnPrivate {}
|
|
|
|
impl PubTraitOnPrivate for OtherType {}
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
//~| ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
|
|
pub struct PublicWithStdImpl;
|
|
|
|
impl From<OtherType> for PublicWithStdImpl {
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
fn from(val: OtherType) -> Self { Self }
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
}
|
|
|
|
impl From<PublicWithStdImpl> for OtherType {
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
//~| ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
fn from(val: PublicWithStdImpl) -> Self { Self }
|
|
//~^ ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
//~| ERROR type `OtherType` from private dependency 'priv_dep' in public interface
|
|
}
|
|
|
|
pub struct AllowedPrivType {
|
|
#[allow(exported_private_dependencies)]
|
|
pub allowed: OtherType,
|
|
}
|
|
|
|
pub use priv_dep::m;
|
|
//~^ ERROR macro `m` from private dependency 'priv_dep' is re-exported
|
|
pub use pm::fn_like;
|
|
//~^ ERROR macro `fn_like` from private dependency 'pm' is re-exported
|
|
pub use pm::PmDerive;
|
|
//~^ ERROR macro `PmDerive` from private dependency 'pm' is re-exported
|
|
pub use pm::pm_attr;
|
|
//~^ ERROR macro `pm_attr` from private dependency 'pm' is re-exported
|
|
|
|
pub use priv_dep::E::V1;
|
|
//~^ ERROR variant `V1` from private dependency 'priv_dep' is re-exported
|
|
|
|
pub use priv_dep::Unit;
|
|
//~^ ERROR type alias `Unit` from private dependency 'priv_dep' is re-exported
|
|
pub use priv_dep::PubPub;
|
|
//~^ ERROR type alias `PubPub` from private dependency 'priv_dep' is re-exported
|
|
pub use priv_dep::PubPriv;
|
|
//~^ ERROR type alias `PubPriv` from private dependency 'priv_dep' is re-exported
|
|
pub use priv_dep::OtherType as Renamed;
|
|
//~^ ERROR struct `Renamed` from private dependency 'priv_dep' is re-exported
|
|
|
|
fn main() {}
|