diff options
Diffstat (limited to 'tests/ui/resolve/privacy-enum-ctor.rs')
-rw-r--r-- | tests/ui/resolve/privacy-enum-ctor.rs | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/ui/resolve/privacy-enum-ctor.rs b/tests/ui/resolve/privacy-enum-ctor.rs new file mode 100644 index 000000000..f0d2cf8c0 --- /dev/null +++ b/tests/ui/resolve/privacy-enum-ctor.rs @@ -0,0 +1,71 @@ +mod m { + pub enum E { + Fn(u8), + Struct { + s: u8, + }, + Unit, + } + + pub mod n { + pub(in m) enum Z { + Fn(u8), + Struct { + s: u8, + }, + Unit, + } + } + + use m::n::Z; // OK, only the type is imported + + fn f() { + n::Z; + //~^ ERROR expected value, found enum `n::Z` + Z; + //~^ ERROR expected value, found enum `Z` + let _: Z = Z::Fn; + //~^ ERROR mismatched types + let _: Z = Z::Struct; + //~^ ERROR expected value, found struct variant `Z::Struct` + let _ = Z::Unit(); + //~^ ERROR expected function, found enum variant `Z::Unit` + let _ = Z::Unit {}; + // This is ok, it is equivalent to not having braces + } +} + +use m::E; // OK, only the type is imported + +fn main() { + let _: E = m::E; + //~^ ERROR expected value, found enum `m::E` + let _: E = m::E::Fn; + //~^ ERROR mismatched types + let _: E = m::E::Struct; + //~^ ERROR expected value, found struct variant `m::E::Struct` + let _: E = m::E::Unit(); + //~^ ERROR expected function, found enum variant `m::E::Unit` + let _: E = E; + //~^ ERROR expected value, found enum `E` + let _: E = E::Fn; + //~^ ERROR mismatched types + let _: E = E::Struct; + //~^ ERROR expected value, found struct variant `E::Struct` + let _: E = E::Unit(); + //~^ ERROR expected function, found enum variant `E::Unit` + let _: Z = m::n::Z; + //~^ ERROR cannot find type `Z` in this scope + //~| ERROR expected value, found enum `m::n::Z` + //~| ERROR enum `Z` is private + let _: Z = m::n::Z::Fn; + //~^ ERROR cannot find type `Z` in this scope + //~| ERROR enum `Z` is private + let _: Z = m::n::Z::Struct; + //~^ ERROR cannot find type `Z` in this scope + //~| ERROR expected value, found struct variant `m::n::Z::Struct` + //~| ERROR enum `Z` is private + let _: Z = m::n::Z::Unit {}; + //~^ ERROR cannot find type `Z` in this scope + //~| ERROR enum `Z` is private +} |