Skip to content

Possible to put/expose private type in exported/public type signature #18082

@japaric

Description

@japaric

STR

mod private {
    pub struct Struct;
}

pub mod public {
    pub struct Struct;
}

struct PrivateStruct;

pub struct Triplet {
    pub left: public::Struct,  // OK public type in exported signature
    //pub middle: PrivateStruct,  // OK private in exported signature is rejected
    //~^ error: private type in exported type signature
    pub right: private::Struct,  // BAD private type in exported signature is accepted
}

rustc --crate-type=lib lib.rs successfully compiles, but it should error with error: private type in exported type signature with span on pub right: private::Struct.

Sanity check that private::Struct is actually private:

extern crate lib;

fn main() {
    let _ = lib::PrivateStruct;  //~ error: struct `PrivateStruct` is private
    let _ = lib::private::Struct;  //~ error: struct `Struct` is private
    let _ = lib::public::Struct;
}

Errors (as expected) with:

sanity-check.rs:4:13: 4:31 error: struct `PrivateStruct` is private
sanity-check.rs:4     let _ = lib::PrivateStruct;  //~ error: struct `PrivateStruct` is private
                              ^~~~~~~~~~~~~~~~~~
sanity-check.rs:5:13: 5:33 error: struct `Struct` is private
sanity-check.rs:5     let _ = lib::private::Struct;  //~ error: struct `Struct` is private
                              ^~~~~~~~~~~~~~~~~~~~
error: aborting due to 2 previous errors

Version

rustc 0.13.0-dev (e4761c85b 2014-10-15 09:57:18 +0000)

This is supposed to be banned by RFC #136

cc @pcwalton

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-linkageArea: linking into static, shared libraries and binaries

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions