Files
rust/tests/ui/privacy/pub-priv-dep/pub-priv1.rs

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

107 lines
3.2 KiB
Rust
Raw Normal View History

//@ 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)]
2019-01-13 18:50:24 -05:00
// This crate is a private dependency
// FIXME: This should trigger.
pub extern crate priv_dep;
2019-12-05 16:26:21 -08:00
// This crate is a public dependency
2019-01-13 20:37:27 -05:00
extern crate pub_dep;
// This crate is a private dependency
extern crate pm;
2019-01-13 18:50:24 -05:00
use priv_dep::{OtherTrait, OtherType};
2019-01-13 20:37:27 -05:00
use pub_dep::PubType;
2019-01-13 18:50:24 -05:00
// Type from private dependency used in private
// type - this is fine
struct PrivateType {
field: OtherType,
2019-01-13 18:50:24 -05:00
}
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
2019-01-13 18:50:24 -05:00
}
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
2019-01-13 18:50:24 -05:00
fn priv_fn(param: OtherType) {}
}
2019-01-13 20:37:27 -05:00
pub trait MyPubTrait {
type Foo: OtherTrait;
}
2020-09-07 10:01:45 +01:00
//~^^ ERROR trait `OtherTrait` from private dependency 'priv_dep' in public interface
2019-01-13 20:37:27 -05:00
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_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 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
2019-01-30 15:37:27 -05:00
pub struct AllowedPrivType {
#[allow(exported_private_dependencies)]
pub allowed: OtherType,
2019-01-30 15:37:27 -05:00
}
// FIXME: This should trigger.
pub use priv_dep::m;
// FIXME: This should trigger.
pub use pm::fn_like;
// FIXME: This should trigger.
pub use pm::PmDerive;
// FIXME: This should trigger.
pub use pm::pm_attr;
// FIXME: This should trigger.
pub use priv_dep::E::V1;
2019-01-13 18:50:24 -05:00
fn main() {}