about summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2018-11-17 20:34:25 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2018-11-18 13:58:40 +0300
commit139d10924112b7cb1b681e1e30af3384f6da89e5 (patch)
tree0f9d957189438a784f6740e5b9c45b13c8265bce /src/test
parent59464709f70f8079dc9e642a2111d847ea8a9536 (diff)
downloadrust-139d10924112b7cb1b681e1e30af3384f6da89e5.tar.gz
rust-139d10924112b7cb1b681e1e30af3384f6da89e5.zip
Add a couple more tests + address review comments
Diffstat (limited to 'src/test')
-rw-r--r--src/test/ui/imports/auxiliary/glob-conflict.rs9
-rw-r--r--src/test/ui/imports/glob-conflict-cross-crate.rs7
-rw-r--r--src/test/ui/imports/glob-conflict-cross-crate.stderr9
-rw-r--r--src/test/ui/imports/issue-55884-1.rs21
-rw-r--r--src/test/ui/imports/issue-55884-1.stderr22
-rw-r--r--src/test/ui/imports/issue-55884-2.rs14
-rw-r--r--src/test/ui/imports/issue-55884-2.stderr9
-rw-r--r--src/test/ui/rust-2018/local-path-suggestions-2018.rs4
-rw-r--r--src/test/ui/rust-2018/local-path-suggestions-2018.stderr4
-rw-r--r--src/test/ui/rust-2018/uniform-paths/deadlock.rs7
-rw-r--r--src/test/ui/rust-2018/uniform-paths/deadlock.stderr9
-rw-r--r--src/test/ui/rust-2018/uniform-paths/issue-54390.rs11
-rw-r--r--src/test/ui/rust-2018/uniform-paths/issue-54390.stderr32
13 files changed, 154 insertions, 4 deletions
diff --git a/src/test/ui/imports/auxiliary/glob-conflict.rs b/src/test/ui/imports/auxiliary/glob-conflict.rs
new file mode 100644
index 00000000000..ac12ed9c81c
--- /dev/null
+++ b/src/test/ui/imports/auxiliary/glob-conflict.rs
@@ -0,0 +1,9 @@
+mod m1 {
+    pub fn f() {}
+}
+mod m2 {
+    pub fn f(_: u8) {}
+}
+
+pub use m1::*;
+pub use m2::*;
diff --git a/src/test/ui/imports/glob-conflict-cross-crate.rs b/src/test/ui/imports/glob-conflict-cross-crate.rs
new file mode 100644
index 00000000000..e02148b19f7
--- /dev/null
+++ b/src/test/ui/imports/glob-conflict-cross-crate.rs
@@ -0,0 +1,7 @@
+// aux-build:glob-conflict.rs
+
+extern crate glob_conflict;
+
+fn main() {
+    glob_conflict::f(); //~ ERROR cannot find function `f` in module `glob_conflict`
+}
diff --git a/src/test/ui/imports/glob-conflict-cross-crate.stderr b/src/test/ui/imports/glob-conflict-cross-crate.stderr
new file mode 100644
index 00000000000..f64637fd6f6
--- /dev/null
+++ b/src/test/ui/imports/glob-conflict-cross-crate.stderr
@@ -0,0 +1,9 @@
+error[E0425]: cannot find function `f` in module `glob_conflict`
+  --> $DIR/glob-conflict-cross-crate.rs:6:20
+   |
+LL |     glob_conflict::f(); //~ ERROR cannot find function `f` in module `glob_conflict`
+   |                    ^ not found in `glob_conflict`
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0425`.
diff --git a/src/test/ui/imports/issue-55884-1.rs b/src/test/ui/imports/issue-55884-1.rs
new file mode 100644
index 00000000000..21744aa5d7b
--- /dev/null
+++ b/src/test/ui/imports/issue-55884-1.rs
@@ -0,0 +1,21 @@
+mod m {
+    mod m1 {
+        pub struct S {}
+    }
+    mod m2 {
+        // Note this derive, it makes this struct macro-expanded,
+        // so it doesn't appear in time to participate in the initial resolution of `use m::S`,
+        // only in the later validation pass.
+        #[derive(Default)]
+        pub struct S {}
+    }
+
+    // Create a glob vs glob ambiguity
+    pub use self::m1::*;
+    pub use self::m2::*;
+}
+
+fn main() {
+    use m::S; //~ ERROR `S` is ambiguous
+    let s = S {};
+}
diff --git a/src/test/ui/imports/issue-55884-1.stderr b/src/test/ui/imports/issue-55884-1.stderr
new file mode 100644
index 00000000000..477e859d081
--- /dev/null
+++ b/src/test/ui/imports/issue-55884-1.stderr
@@ -0,0 +1,22 @@
+error[E0659]: `S` is ambiguous (glob import vs glob import in the same module)
+  --> $DIR/issue-55884-1.rs:19:12
+   |
+LL |     use m::S; //~ ERROR `S` is ambiguous
+   |            ^ ambiguous name
+   |
+note: `S` could refer to the struct imported here
+  --> $DIR/issue-55884-1.rs:14:13
+   |
+LL |     pub use self::m1::*;
+   |             ^^^^^^^^^^^
+   = help: consider adding an explicit import of `S` to disambiguate
+note: `S` could also refer to the struct imported here
+  --> $DIR/issue-55884-1.rs:15:13
+   |
+LL |     pub use self::m2::*;
+   |             ^^^^^^^^^^^
+   = help: consider adding an explicit import of `S` to disambiguate
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0659`.
diff --git a/src/test/ui/imports/issue-55884-2.rs b/src/test/ui/imports/issue-55884-2.rs
new file mode 100644
index 00000000000..1b4f652c9fc
--- /dev/null
+++ b/src/test/ui/imports/issue-55884-2.rs
@@ -0,0 +1,14 @@
+mod options {
+    pub struct ParseOptions {}
+}
+
+mod parser {
+    pub use options::*;
+    // Private single import shadows public glob import, but arrives too late for initial
+    // resolution of `use parser::ParseOptions` because it depends on that resolution itself.
+    use ParseOptions;
+}
+
+pub use parser::ParseOptions; //~ ERROR struct `ParseOptions` is private
+
+fn main() {}
diff --git a/src/test/ui/imports/issue-55884-2.stderr b/src/test/ui/imports/issue-55884-2.stderr
new file mode 100644
index 00000000000..f8a6cb4a580
--- /dev/null
+++ b/src/test/ui/imports/issue-55884-2.stderr
@@ -0,0 +1,9 @@
+error[E0603]: struct `ParseOptions` is private
+  --> $DIR/issue-55884-2.rs:12:17
+   |
+LL | pub use parser::ParseOptions; //~ ERROR struct `ParseOptions` is private
+   |                 ^^^^^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0603`.
diff --git a/src/test/ui/rust-2018/local-path-suggestions-2018.rs b/src/test/ui/rust-2018/local-path-suggestions-2018.rs
index 8c9583cfa1b..0d4aefff931 100644
--- a/src/test/ui/rust-2018/local-path-suggestions-2018.rs
+++ b/src/test/ui/rust-2018/local-path-suggestions-2018.rs
@@ -19,7 +19,7 @@ mod foo {
 }
 
 mod bazz {
-    use foo::Bar;
+    use foo::Bar; //~ ERROR unresolved import `foo`
 
     fn baz() {
         let x: Bar = 22;
@@ -28,6 +28,6 @@ mod bazz {
 
 use foo::Bar;
 
-use foobar::Baz;
+use foobar::Baz; //~ ERROR unresolved import `foobar`
 
 fn main() { }
diff --git a/src/test/ui/rust-2018/local-path-suggestions-2018.stderr b/src/test/ui/rust-2018/local-path-suggestions-2018.stderr
index 27ea6642eb0..a445a4c612b 100644
--- a/src/test/ui/rust-2018/local-path-suggestions-2018.stderr
+++ b/src/test/ui/rust-2018/local-path-suggestions-2018.stderr
@@ -1,7 +1,7 @@
 error[E0432]: unresolved import `foo`
   --> $DIR/local-path-suggestions-2018.rs:22:9
    |
-LL |     use foo::Bar;
+LL |     use foo::Bar; //~ ERROR unresolved import `foo`
    |         ^^^ did you mean `crate::foo`?
    |
    = note: `use` statements changed in Rust 2018; read more at <https://doc.rust-lang.org/edition-guide/rust-2018/module-system/path-clarity.html>
@@ -9,7 +9,7 @@ LL |     use foo::Bar;
 error[E0432]: unresolved import `foobar`
   --> $DIR/local-path-suggestions-2018.rs:31:5
    |
-LL | use foobar::Baz;
+LL | use foobar::Baz; //~ ERROR unresolved import `foobar`
    |     ^^^^^^ did you mean `baz::foobar`?
 
 error: aborting due to 2 previous errors
diff --git a/src/test/ui/rust-2018/uniform-paths/deadlock.rs b/src/test/ui/rust-2018/uniform-paths/deadlock.rs
new file mode 100644
index 00000000000..3228d799083
--- /dev/null
+++ b/src/test/ui/rust-2018/uniform-paths/deadlock.rs
@@ -0,0 +1,7 @@
+// edition:2018
+// compile-flags:--extern foo --extern bar
+
+use foo::bar; //~ ERROR unresolved import
+use bar::foo;
+
+fn main() {}
diff --git a/src/test/ui/rust-2018/uniform-paths/deadlock.stderr b/src/test/ui/rust-2018/uniform-paths/deadlock.stderr
new file mode 100644
index 00000000000..8bbc8f33039
--- /dev/null
+++ b/src/test/ui/rust-2018/uniform-paths/deadlock.stderr
@@ -0,0 +1,9 @@
+error[E0432]: unresolved import
+  --> $DIR/deadlock.rs:4:5
+   |
+LL | use foo::bar; //~ ERROR unresolved import
+   |     ^^^^^^^^
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0432`.
diff --git a/src/test/ui/rust-2018/uniform-paths/issue-54390.rs b/src/test/ui/rust-2018/uniform-paths/issue-54390.rs
new file mode 100644
index 00000000000..536cc25e35a
--- /dev/null
+++ b/src/test/ui/rust-2018/uniform-paths/issue-54390.rs
@@ -0,0 +1,11 @@
+// edition:2018
+
+#![deny(unused)]
+
+use std::fmt;
+
+// No "unresolved import" + "unused import" combination here.
+use fmt::Write; //~ ERROR imports can only refer to extern crate names
+                //~| ERROR unused import: `fmt::Write`
+
+fn main() {}
diff --git a/src/test/ui/rust-2018/uniform-paths/issue-54390.stderr b/src/test/ui/rust-2018/uniform-paths/issue-54390.stderr
new file mode 100644
index 00000000000..8f86698c9c1
--- /dev/null
+++ b/src/test/ui/rust-2018/uniform-paths/issue-54390.stderr
@@ -0,0 +1,32 @@
+error[E0658]: imports can only refer to extern crate names passed with `--extern` on stable channel (see issue #53130)
+  --> $DIR/issue-54390.rs:8:5
+   |
+LL | use std::fmt;
+   |     -------- not an extern crate passed with `--extern`
+...
+LL | use fmt::Write; //~ ERROR imports can only refer to extern crate names
+   |     ^^^
+   |
+   = help: add #![feature(uniform_paths)] to the crate attributes to enable
+note: this import refers to the module imported here
+  --> $DIR/issue-54390.rs:5:5
+   |
+LL | use std::fmt;
+   |     ^^^^^^^^
+
+error: unused import: `fmt::Write`
+  --> $DIR/issue-54390.rs:8:5
+   |
+LL | use fmt::Write; //~ ERROR imports can only refer to extern crate names
+   |     ^^^^^^^^^^
+   |
+note: lint level defined here
+  --> $DIR/issue-54390.rs:3:9
+   |
+LL | #![deny(unused)]
+   |         ^^^^^^
+   = note: #[deny(unused_imports)] implied by #[deny(unused)]
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0658`.