about summary refs log tree commit diff
path: root/tests/ui/namespace
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/namespace')
-rw-r--r--tests/ui/namespace/auxiliary/namespace-mix.rs66
-rw-r--r--tests/ui/namespace/auxiliary/namespaced_enums.rs10
-rw-r--r--tests/ui/namespace/namespace-mix.rs155
-rw-r--r--tests/ui/namespace/namespace-mix.stderr728
-rw-r--r--tests/ui/namespace/namespaced-enum-glob-import-no-impls-xcrate.rs15
-rw-r--r--tests/ui/namespace/namespaced-enum-glob-import-no-impls-xcrate.stderr27
-rw-r--r--tests/ui/namespace/namespaced-enum-glob-import-no-impls.rs25
-rw-r--r--tests/ui/namespace/namespaced-enum-glob-import-no-impls.stderr27
8 files changed, 1053 insertions, 0 deletions
diff --git a/tests/ui/namespace/auxiliary/namespace-mix.rs b/tests/ui/namespace/auxiliary/namespace-mix.rs
new file mode 100644
index 00000000000..fb39d29f87f
--- /dev/null
+++ b/tests/ui/namespace/auxiliary/namespace-mix.rs
@@ -0,0 +1,66 @@
+pub mod c {
+    pub struct S {}
+    pub struct TS();
+    pub struct US;
+    pub enum E {
+        V {},
+        TV(),
+        UV,
+    }
+
+    pub struct Item;
+}
+
+pub mod xm1 {
+    pub use ::c::*;
+    pub type S = ::c::Item;
+}
+pub mod xm2 {
+    pub use ::c::*;
+    pub const S: ::c::Item = ::c::Item;
+}
+
+pub mod xm3 {
+    pub use ::c::*;
+    pub type TS = ::c::Item;
+}
+pub mod xm4 {
+    pub use ::c::*;
+    pub const TS: ::c::Item = ::c::Item;
+}
+
+pub mod xm5 {
+    pub use ::c::*;
+    pub type US = ::c::Item;
+}
+pub mod xm6 {
+    pub use ::c::*;
+    pub const US: ::c::Item = ::c::Item;
+}
+
+pub mod xm7 {
+    pub use ::c::E::*;
+    pub type V = ::c::Item;
+}
+pub mod xm8 {
+    pub use ::c::E::*;
+    pub const V: ::c::Item = ::c::Item;
+}
+
+pub mod xm9 {
+    pub use ::c::E::*;
+    pub type TV = ::c::Item;
+}
+pub mod xmA {
+    pub use ::c::E::*;
+    pub const TV: ::c::Item = ::c::Item;
+}
+
+pub mod xmB {
+    pub use ::c::E::*;
+    pub type UV = ::c::Item;
+}
+pub mod xmC {
+    pub use ::c::E::*;
+    pub const UV: ::c::Item = ::c::Item;
+}
diff --git a/tests/ui/namespace/auxiliary/namespaced_enums.rs b/tests/ui/namespace/auxiliary/namespaced_enums.rs
new file mode 100644
index 00000000000..d3548c76cf2
--- /dev/null
+++ b/tests/ui/namespace/auxiliary/namespaced_enums.rs
@@ -0,0 +1,10 @@
+pub enum Foo {
+    A,
+    B(isize),
+    C { a: isize },
+}
+
+impl Foo {
+    pub fn foo() {}
+    pub fn bar(&self) {}
+}
diff --git a/tests/ui/namespace/namespace-mix.rs b/tests/ui/namespace/namespace-mix.rs
new file mode 100644
index 00000000000..c5b30f148bd
--- /dev/null
+++ b/tests/ui/namespace/namespace-mix.rs
@@ -0,0 +1,155 @@
+// aux-build:namespace-mix.rs
+
+extern crate namespace_mix;
+use namespace_mix::*;
+
+mod c {
+    pub struct S {}
+    pub struct TS();
+    pub struct US;
+    pub enum E {
+        V {},
+        TV(),
+        UV,
+    }
+
+    pub struct Item;
+}
+
+// Use something emitting the type argument name, e.g., unsatisfied bound.
+trait Impossible {}
+fn check<T: Impossible>(_: T) {}
+
+mod m1 {
+    pub use ::c::*;
+    pub type S = ::c::Item;
+}
+mod m2 {
+    pub use ::c::*;
+    pub const S: ::c::Item = ::c::Item;
+}
+
+fn f12() {
+    check(m1::S{}); //~ ERROR c::Item
+    check(m1::S); //~ ERROR expected value, found type alias `m1::S`
+    check(m2::S{}); //~ ERROR c::S
+    check(m2::S); //~ ERROR c::Item
+}
+fn xf12() {
+    check(xm1::S{}); //~ ERROR c::Item
+    check(xm1::S); //~ ERROR expected value, found type alias `xm1::S`
+    check(xm2::S{}); //~ ERROR c::S
+    check(xm2::S); //~ ERROR c::Item
+}
+
+mod m3 {
+    pub use ::c::*;
+    pub type TS = ::c::Item;
+}
+mod m4 {
+    pub use ::c::*;
+    pub const TS: ::c::Item = ::c::Item;
+}
+
+fn f34() {
+    check(m3::TS{}); //~ ERROR c::Item
+    check(m3::TS); //~ ERROR c::TS
+    check(m4::TS{}); //~ ERROR c::TS
+    check(m4::TS); //~ ERROR c::Item
+}
+fn xf34() {
+    check(xm3::TS{}); //~ ERROR c::Item
+    check(xm3::TS); //~ ERROR c::TS
+    check(xm4::TS{}); //~ ERROR c::TS
+    check(xm4::TS); //~ ERROR c::Item
+}
+
+mod m5 {
+    pub use ::c::*;
+    pub type US = ::c::Item;
+}
+mod m6 {
+    pub use ::c::*;
+    pub const US: ::c::Item = ::c::Item;
+}
+
+fn f56() {
+    check(m5::US{}); //~ ERROR c::Item
+    check(m5::US); //~ ERROR c::US
+    check(m6::US{}); //~ ERROR c::US
+    check(m6::US); //~ ERROR c::Item
+}
+fn xf56() {
+    check(xm5::US{}); //~ ERROR c::Item
+    check(xm5::US); //~ ERROR c::US
+    check(xm6::US{}); //~ ERROR c::US
+    check(xm6::US); //~ ERROR c::Item
+}
+
+mod m7 {
+    pub use ::c::E::*;
+    pub type V = ::c::Item;
+}
+mod m8 {
+    pub use ::c::E::*;
+    pub const V: ::c::Item = ::c::Item;
+}
+
+fn f78() {
+    check(m7::V{}); //~ ERROR c::Item
+    check(m7::V); //~ ERROR expected value, found type alias `m7::V`
+    check(m8::V{}); //~ ERROR c::E
+    check(m8::V); //~ ERROR c::Item
+}
+fn xf78() {
+    check(xm7::V{}); //~ ERROR c::Item
+    check(xm7::V); //~ ERROR expected value, found type alias `xm7::V`
+    check(xm8::V{}); //~ ERROR c::E
+    check(xm8::V); //~ ERROR c::Item
+}
+
+mod m9 {
+    pub use ::c::E::*;
+    pub type TV = ::c::Item;
+}
+mod mA {
+    pub use ::c::E::*;
+    pub const TV: ::c::Item = ::c::Item;
+}
+
+fn f9A() {
+    check(m9::TV{}); //~ ERROR c::Item
+    check(m9::TV); //~ ERROR c::E
+    check(mA::TV{}); //~ ERROR c::E
+    check(mA::TV); //~ ERROR c::Item
+}
+fn xf9A() {
+    check(xm9::TV{}); //~ ERROR c::Item
+    check(xm9::TV); //~ ERROR c::E
+    check(xmA::TV{}); //~ ERROR c::E
+    check(xmA::TV); //~ ERROR c::Item
+}
+
+mod mB {
+    pub use ::c::E::*;
+    pub type UV = ::c::Item;
+}
+mod mC {
+    pub use ::c::E::*;
+    pub const UV: ::c::Item = ::c::Item;
+}
+
+fn fBC() {
+    check(mB::UV{}); //~ ERROR c::Item
+    check(mB::UV); //~ ERROR c::E
+    check(mC::UV{}); //~ ERROR c::E
+    check(mC::UV); //~ ERROR c::Item
+}
+fn xfBC() {
+    check(xmB::UV{}); //~ ERROR c::Item
+    check(xmB::UV); //~ ERROR c::E
+    check(xmC::UV{}); //~ ERROR c::E
+    check(xmC::UV); //~ ERROR c::Item
+}
+
+fn main() {}
diff --git a/tests/ui/namespace/namespace-mix.stderr b/tests/ui/namespace/namespace-mix.stderr
new file mode 100644
index 00000000000..cb72d4a1c42
--- /dev/null
+++ b/tests/ui/namespace/namespace-mix.stderr
@@ -0,0 +1,728 @@
+error[E0423]: expected value, found type alias `m1::S`
+  --> $DIR/namespace-mix.rs:34:11
+   |
+LL |     pub struct TS();
+   |     ---------------- similarly named tuple struct `TS` defined here
+...
+LL |     check(m1::S);
+   |           ^^^^^
+   |
+   = note: can't use a type alias as a constructor
+help: a tuple struct with a similar name exists
+   |
+LL |     check(m1::TS);
+   |               ~~
+help: consider importing one of these items instead
+   |
+LL | use m2::S;
+   |
+LL | use xm2::S;
+   |
+help: if you import `S`, refer to it directly
+   |
+LL -     check(m1::S);
+LL +     check(S);
+   |
+
+error[E0423]: expected value, found type alias `xm1::S`
+  --> $DIR/namespace-mix.rs:40:11
+   |
+LL |     check(xm1::S);
+   |           ^^^^^^
+   |
+  ::: $DIR/auxiliary/namespace-mix.rs:3:5
+   |
+LL |     pub struct TS();
+   |     ------------- similarly named tuple struct `TS` defined here
+   |
+   = note: can't use a type alias as a constructor
+help: a tuple struct with a similar name exists
+   |
+LL |     check(xm1::TS);
+   |                ~~
+help: consider importing one of these items instead
+   |
+LL | use m2::S;
+   |
+LL | use xm2::S;
+   |
+help: if you import `S`, refer to it directly
+   |
+LL -     check(xm1::S);
+LL +     check(S);
+   |
+
+error[E0423]: expected value, found type alias `m7::V`
+  --> $DIR/namespace-mix.rs:100:11
+   |
+LL |         TV(),
+   |         ---- similarly named tuple variant `TV` defined here
+...
+LL |     check(m7::V);
+   |           ^^^^^
+   |
+   = note: can't use a type alias as a constructor
+help: a tuple variant with a similar name exists
+   |
+LL |     check(m7::TV);
+   |               ~~
+help: consider importing one of these items instead
+   |
+LL | use m8::V;
+   |
+LL | use xm8::V;
+   |
+help: if you import `V`, refer to it directly
+   |
+LL -     check(m7::V);
+LL +     check(V);
+   |
+
+error[E0423]: expected value, found type alias `xm7::V`
+  --> $DIR/namespace-mix.rs:106:11
+   |
+LL |     check(xm7::V);
+   |           ^^^^^^
+   |
+  ::: $DIR/auxiliary/namespace-mix.rs:7:9
+   |
+LL |         TV(),
+   |         -- similarly named tuple variant `TV` defined here
+   |
+   = note: can't use a type alias as a constructor
+help: a tuple variant with a similar name exists
+   |
+LL |     check(xm7::TV);
+   |                ~~
+help: consider importing one of these items instead
+   |
+LL | use m8::V;
+   |
+LL | use xm8::V;
+   |
+help: if you import `V`, refer to it directly
+   |
+LL -     check(xm7::V);
+LL +     check(V);
+   |
+
+error[E0277]: the trait bound `c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:33:11
+   |
+LL |     check(m1::S{});
+   |     ----- ^^^^^^^ the trait `Impossible` is not implemented for `c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::S: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:35:11
+   |
+LL |     check(m2::S{});
+   |     ----- ^^^^^^^ the trait `Impossible` is not implemented for `c::S`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:36:11
+   |
+LL |     check(m2::S);
+   |     ----- ^^^^^ the trait `Impossible` is not implemented for `c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:39:11
+   |
+LL |     check(xm1::S{});
+   |     ----- ^^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::S: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:41:11
+   |
+LL |     check(xm2::S{});
+   |     ----- ^^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::S`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:42:11
+   |
+LL |     check(xm2::S);
+   |     ----- ^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:55:11
+   |
+LL |     check(m3::TS{});
+   |     ----- ^^^^^^^^ the trait `Impossible` is not implemented for `c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `fn() -> c::TS {c::TS}: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:56:11
+   |
+LL |     check(m3::TS);
+   |     ----- ^^^^^^ the trait `Impossible` is not implemented for fn item `fn() -> c::TS {c::TS}`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::TS: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:57:11
+   |
+LL |     check(m4::TS{});
+   |     ----- ^^^^^^^^ the trait `Impossible` is not implemented for `c::TS`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:58:11
+   |
+LL |     check(m4::TS);
+   |     ----- ^^^^^^ the trait `Impossible` is not implemented for `c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:61:11
+   |
+LL |     check(xm3::TS{});
+   |     ----- ^^^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `fn() -> namespace_mix::c::TS {namespace_mix::c::TS}: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:62:11
+   |
+LL |     check(xm3::TS);
+   |     ----- ^^^^^^^ the trait `Impossible` is not implemented for fn item `fn() -> namespace_mix::c::TS {namespace_mix::c::TS}`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::TS: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:63:11
+   |
+LL |     check(xm4::TS{});
+   |     ----- ^^^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::TS`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:64:11
+   |
+LL |     check(xm4::TS);
+   |     ----- ^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:77:11
+   |
+LL |     check(m5::US{});
+   |     ----- ^^^^^^^^ the trait `Impossible` is not implemented for `c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::US: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:78:11
+   |
+LL |     check(m5::US);
+   |     ----- ^^^^^^ the trait `Impossible` is not implemented for `c::US`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::US: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:79:11
+   |
+LL |     check(m6::US{});
+   |     ----- ^^^^^^^^ the trait `Impossible` is not implemented for `c::US`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:80:11
+   |
+LL |     check(m6::US);
+   |     ----- ^^^^^^ the trait `Impossible` is not implemented for `c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:83:11
+   |
+LL |     check(xm5::US{});
+   |     ----- ^^^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::US: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:84:11
+   |
+LL |     check(xm5::US);
+   |     ----- ^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::US`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::US: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:85:11
+   |
+LL |     check(xm6::US{});
+   |     ----- ^^^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::US`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:86:11
+   |
+LL |     check(xm6::US);
+   |     ----- ^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:99:11
+   |
+LL |     check(m7::V{});
+   |     ----- ^^^^^^^ the trait `Impossible` is not implemented for `c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::E: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:101:11
+   |
+LL |     check(m8::V{});
+   |     ----- ^^^^^^^ the trait `Impossible` is not implemented for `c::E`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:102:11
+   |
+LL |     check(m8::V);
+   |     ----- ^^^^^ the trait `Impossible` is not implemented for `c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:105:11
+   |
+LL |     check(xm7::V{});
+   |     ----- ^^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::E: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:107:11
+   |
+LL |     check(xm8::V{});
+   |     ----- ^^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::E`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:108:11
+   |
+LL |     check(xm8::V);
+   |     ----- ^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:121:11
+   |
+LL |     check(m9::TV{});
+   |     ----- ^^^^^^^^ the trait `Impossible` is not implemented for `c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `fn() -> c::E {c::E::TV}: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:122:11
+   |
+LL |     check(m9::TV);
+   |     ----- ^^^^^^ the trait `Impossible` is not implemented for fn item `fn() -> c::E {c::E::TV}`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::E: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:123:11
+   |
+LL |     check(mA::TV{});
+   |     ----- ^^^^^^^^ the trait `Impossible` is not implemented for `c::E`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:124:11
+   |
+LL |     check(mA::TV);
+   |     ----- ^^^^^^ the trait `Impossible` is not implemented for `c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:127:11
+   |
+LL |     check(xm9::TV{});
+   |     ----- ^^^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `fn() -> namespace_mix::c::E {namespace_mix::xm7::TV}: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:128:11
+   |
+LL |     check(xm9::TV);
+   |     ----- ^^^^^^^ the trait `Impossible` is not implemented for fn item `fn() -> namespace_mix::c::E {namespace_mix::xm7::TV}`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::E: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:129:11
+   |
+LL |     check(xmA::TV{});
+   |     ----- ^^^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::E`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:130:11
+   |
+LL |     check(xmA::TV);
+   |     ----- ^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:143:11
+   |
+LL |     check(mB::UV{});
+   |     ----- ^^^^^^^^ the trait `Impossible` is not implemented for `c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::E: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:144:11
+   |
+LL |     check(mB::UV);
+   |     ----- ^^^^^^ the trait `Impossible` is not implemented for `c::E`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::E: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:145:11
+   |
+LL |     check(mC::UV{});
+   |     ----- ^^^^^^^^ the trait `Impossible` is not implemented for `c::E`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:146:11
+   |
+LL |     check(mC::UV);
+   |     ----- ^^^^^^ the trait `Impossible` is not implemented for `c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:149:11
+   |
+LL |     check(xmB::UV{});
+   |     ----- ^^^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::E: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:150:11
+   |
+LL |     check(xmB::UV);
+   |     ----- ^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::E`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::E: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:151:11
+   |
+LL |     check(xmC::UV{});
+   |     ----- ^^^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::E`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error[E0277]: the trait bound `namespace_mix::c::Item: Impossible` is not satisfied
+  --> $DIR/namespace-mix.rs:152:11
+   |
+LL |     check(xmC::UV);
+   |     ----- ^^^^^^^ the trait `Impossible` is not implemented for `namespace_mix::c::Item`
+   |     |
+   |     required by a bound introduced by this call
+   |
+note: required by a bound in `check`
+  --> $DIR/namespace-mix.rs:21:13
+   |
+LL | fn check<T: Impossible>(_: T) {}
+   |             ^^^^^^^^^^ required by this bound in `check`
+
+error: aborting due to 48 previous errors
+
+Some errors have detailed explanations: E0277, E0423.
+For more information about an error, try `rustc --explain E0277`.
diff --git a/tests/ui/namespace/namespaced-enum-glob-import-no-impls-xcrate.rs b/tests/ui/namespace/namespaced-enum-glob-import-no-impls-xcrate.rs
new file mode 100644
index 00000000000..feb94b68184
--- /dev/null
+++ b/tests/ui/namespace/namespaced-enum-glob-import-no-impls-xcrate.rs
@@ -0,0 +1,15 @@
+// aux-build:namespaced_enums.rs
+extern crate namespaced_enums;
+
+mod m {
+    pub use namespaced_enums::Foo::*;
+}
+
+pub fn main() {
+    use namespaced_enums::Foo::*;
+
+    foo(); //~ ERROR cannot find function `foo` in this scope
+    m::foo(); //~ ERROR cannot find function `foo` in module `m`
+    bar(); //~ ERROR cannot find function `bar` in this scope
+    m::bar(); //~ ERROR cannot find function `bar` in module `m`
+}
diff --git a/tests/ui/namespace/namespaced-enum-glob-import-no-impls-xcrate.stderr b/tests/ui/namespace/namespaced-enum-glob-import-no-impls-xcrate.stderr
new file mode 100644
index 00000000000..227d30282b1
--- /dev/null
+++ b/tests/ui/namespace/namespaced-enum-glob-import-no-impls-xcrate.stderr
@@ -0,0 +1,27 @@
+error[E0425]: cannot find function `foo` in module `m`
+  --> $DIR/namespaced-enum-glob-import-no-impls-xcrate.rs:12:8
+   |
+LL |     m::foo();
+   |        ^^^ not found in `m`
+
+error[E0425]: cannot find function `bar` in module `m`
+  --> $DIR/namespaced-enum-glob-import-no-impls-xcrate.rs:14:8
+   |
+LL |     m::bar();
+   |        ^^^ not found in `m`
+
+error[E0425]: cannot find function `foo` in this scope
+  --> $DIR/namespaced-enum-glob-import-no-impls-xcrate.rs:11:5
+   |
+LL |     foo();
+   |     ^^^ not found in this scope
+
+error[E0425]: cannot find function `bar` in this scope
+  --> $DIR/namespaced-enum-glob-import-no-impls-xcrate.rs:13:5
+   |
+LL |     bar();
+   |     ^^^ not found in this scope
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0425`.
diff --git a/tests/ui/namespace/namespaced-enum-glob-import-no-impls.rs b/tests/ui/namespace/namespaced-enum-glob-import-no-impls.rs
new file mode 100644
index 00000000000..ab24f36f9a1
--- /dev/null
+++ b/tests/ui/namespace/namespaced-enum-glob-import-no-impls.rs
@@ -0,0 +1,25 @@
+mod m2 {
+    pub enum Foo {
+        A,
+        B(isize),
+        C { a: isize },
+    }
+
+    impl Foo {
+        pub fn foo() {}
+        pub fn bar(&self) {}
+    }
+}
+
+mod m {
+    pub use m2::Foo::*;
+}
+
+pub fn main() {
+    use m2::Foo::*;
+
+    foo(); //~ ERROR cannot find function `foo` in this scope
+    m::foo(); //~ ERROR cannot find function `foo` in module `m`
+    bar(); //~ ERROR cannot find function `bar` in this scope
+    m::bar(); //~ ERROR cannot find function `bar` in module `m`
+}
diff --git a/tests/ui/namespace/namespaced-enum-glob-import-no-impls.stderr b/tests/ui/namespace/namespaced-enum-glob-import-no-impls.stderr
new file mode 100644
index 00000000000..111ac7ab0f0
--- /dev/null
+++ b/tests/ui/namespace/namespaced-enum-glob-import-no-impls.stderr
@@ -0,0 +1,27 @@
+error[E0425]: cannot find function `foo` in module `m`
+  --> $DIR/namespaced-enum-glob-import-no-impls.rs:22:8
+   |
+LL |     m::foo();
+   |        ^^^ not found in `m`
+
+error[E0425]: cannot find function `bar` in module `m`
+  --> $DIR/namespaced-enum-glob-import-no-impls.rs:24:8
+   |
+LL |     m::bar();
+   |        ^^^ not found in `m`
+
+error[E0425]: cannot find function `foo` in this scope
+  --> $DIR/namespaced-enum-glob-import-no-impls.rs:21:5
+   |
+LL |     foo();
+   |     ^^^ not found in this scope
+
+error[E0425]: cannot find function `bar` in this scope
+  --> $DIR/namespaced-enum-glob-import-no-impls.rs:23:5
+   |
+LL |     bar();
+   |     ^^^ not found in this scope
+
+error: aborting due to 4 previous errors
+
+For more information about this error, try `rustc --explain E0425`.