]> git.lizzy.rs Git - rust.git/commitdiff
#56411 do not suggest a fix for a import conflict in a macro
authorFrançois Mockers <mockersf@gmail.com>
Tue, 18 Dec 2018 01:22:08 +0000 (02:22 +0100)
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>
Fri, 25 Jan 2019 19:39:14 +0000 (22:39 +0300)
src/librustc_resolve/lib.rs
src/test/ui/issues/issue-56411.rs [new file with mode: 0644]
src/test/ui/issues/issue-56411.stderr [new file with mode: 0644]
src/test/ui/issues/issue_56411.rs [new file with mode: 0644]

index 4c9347afa611d442d27a1f49e69e847bce421c64..8dd09076a00acbdf12c205982c5e04b94c72f7f4 100644 (file)
@@ -5147,11 +5147,13 @@ fn report_conflict<'b>(&mut self,
             if let (
                 Ok(snippet),
                 NameBindingKind::Import { directive, ..},
-                _dummy @ false,
+                false,
+                false,
             ) = (
                 cm.span_to_snippet(binding.span),
                 binding.kind.clone(),
                 binding.span.is_dummy(),
+                binding.span.ctxt().outer().expn_info().is_some(),
             ) {
                 let suggested_name = if name.as_str().chars().next().unwrap().is_uppercase() {
                     format!("Other{}", name)
diff --git a/src/test/ui/issues/issue-56411.rs b/src/test/ui/issues/issue-56411.rs
new file mode 100644 (file)
index 0000000..599f277
--- /dev/null
@@ -0,0 +1,17 @@
+macro_rules! import {
+    ( $($name:ident),* ) => {
+        $(
+            mod $name;
+            pub use self::$name;
+            //~^ ERROR the name `issue_56411` is defined multiple times
+            //~| ERROR `issue_56411` is private, and cannot be re-exported
+
+        )*
+    }
+}
+
+import!(issue_56411);
+
+fn main() {
+    println!("Hello, world!");
+}
diff --git a/src/test/ui/issues/issue-56411.stderr b/src/test/ui/issues/issue-56411.stderr
new file mode 100644 (file)
index 0000000..842d86f
--- /dev/null
@@ -0,0 +1,31 @@
+error[E0255]: the name `issue_56411` is defined multiple times
+  --> $DIR/issue-56411.rs:5:21
+   |
+LL |             mod $name;
+   |             ---------- previous definition of the module `issue_56411` here
+LL |             pub use self::$name;
+   |                     ^^^^^^^^^^^
+   |                     |
+   |                     `issue_56411` reimported here
+   |                     you can use `as` to change the binding name of the import
+...
+LL | import!(issue_56411);
+   | --------------------- in this macro invocation
+   |
+   = note: `issue_56411` must be defined only once in the type namespace of this module
+
+error[E0365]: `issue_56411` is private, and cannot be re-exported
+  --> $DIR/issue-56411.rs:5:21
+   |
+LL |             pub use self::$name;
+   |                     ^^^^^^^^^^^ re-export of private `issue_56411`
+...
+LL | import!(issue_56411);
+   | --------------------- in this macro invocation
+   |
+   = note: consider declaring type or module `issue_56411` with `pub`
+
+error: aborting due to 2 previous errors
+
+Some errors occurred: E0255, E0365.
+For more information about an error, try `rustc --explain E0255`.
diff --git a/src/test/ui/issues/issue_56411.rs b/src/test/ui/issues/issue_56411.rs
new file mode 100644 (file)
index 0000000..bd689e9
--- /dev/null
@@ -0,0 +1,5 @@
+// compile-pass
+
+struct T {}
+
+fn main() {}