| //@ aux-crate:priv:diamond_priv_dep=diamond_priv_dep.rs |
| //@ aux-crate:diamond_pub_dep=diamond_pub_dep.rs |
| //@ compile-flags: -Zunstable-options |
| |
| // A diamond dependency: |
| // |
| // diamond_reepxort |
| // /\ |
| // (public) / \ (PRIVATE) |
| // / \ |
| // diamond_pub_dep diamond_priv_dep |
| // \ / |
| // (public) \ / (public) |
| // \/ |
| // shared |
| // |
| // Where the pub and private crates reexport something from the shared crate. |
| // |
| // Checks the behavior when the same shared item appears in the public API, |
| // depending on whether it comes from the public side or the private side. |
| // |
| // NOTE: compiletest does not support deduplicating shared dependencies. |
| // However, it should work well enough for this test, the only downside is |
| // that diamond_shared gets built twice. |
| |
| #![crate_type = "lib"] |
| #![deny(exported_private_dependencies)] |
| |
| extern crate diamond_priv_dep; |
| extern crate diamond_pub_dep; |
| |
| // FIXME: This should trigger. |
| pub fn leaks_priv() -> diamond_priv_dep::Shared { |
| diamond_priv_dep::Shared |
| } |
| |
| pub fn leaks_pub() -> diamond_pub_dep::Shared { |
| diamond_pub_dep::Shared |
| } |
| |
| pub struct PrivInStruct { |
| pub f: diamond_priv_dep::SharedInType |
| //~^ ERROR type `diamond_priv_dep::SharedInType` from private dependency 'diamond_priv_dep' in public interface |
| } |
| |
| pub struct PubInStruct { |
| pub f: diamond_pub_dep::SharedInType |
| } |