about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--compiler/rustc_resolve/src/diagnostics.rs4
-rw-r--r--src/test/ui/imports/inaccessible_type_aliases.rs14
-rw-r--r--src/test/ui/imports/inaccessible_type_aliases.stderr30
3 files changed, 47 insertions, 1 deletions
diff --git a/compiler/rustc_resolve/src/diagnostics.rs b/compiler/rustc_resolve/src/diagnostics.rs
index 4fbbd9deaeb..0f58206eee9 100644
--- a/compiler/rustc_resolve/src/diagnostics.rs
+++ b/compiler/rustc_resolve/src/diagnostics.rs
@@ -2589,8 +2589,10 @@ fn show_candidates(
             } else {
                 "item".to_string()
             };
+            let plural_descr =
+                if descr.ends_with("s") { format!("{}es", descr) } else { format!("{}s", descr) };
 
-            let mut msg = format!("{}these {}s exist but are inaccessible", prefix, descr);
+            let mut msg = format!("{}these {} exist but are inaccessible", prefix, plural_descr);
             let mut has_colon = false;
 
             let mut spans = Vec::new();
diff --git a/src/test/ui/imports/inaccessible_type_aliases.rs b/src/test/ui/imports/inaccessible_type_aliases.rs
new file mode 100644
index 00000000000..c3d4214e282
--- /dev/null
+++ b/src/test/ui/imports/inaccessible_type_aliases.rs
@@ -0,0 +1,14 @@
+mod a {
+    type Foo = u64;
+    type Bar = u64;
+}
+
+mod b {
+    type Foo = u64;
+}
+
+fn main() {
+    let x: Foo = 100; //~ ERROR: cannot find type `Foo` in this scope
+    let y: Bar = 100; //~ ERROR: cannot find type `Bar` in this scope
+    println!("x: {}, y: {}", x, y);
+}
diff --git a/src/test/ui/imports/inaccessible_type_aliases.stderr b/src/test/ui/imports/inaccessible_type_aliases.stderr
new file mode 100644
index 00000000000..ef224246061
--- /dev/null
+++ b/src/test/ui/imports/inaccessible_type_aliases.stderr
@@ -0,0 +1,30 @@
+error[E0412]: cannot find type `Foo` in this scope
+  --> $DIR/inaccessible_type_aliases.rs:11:12
+   |
+LL |     let x: Foo = 100;
+   |            ^^^ not found in this scope
+   |
+note: these type aliases exist but are inaccessible
+  --> $DIR/inaccessible_type_aliases.rs:2:5
+   |
+LL |     type Foo = u64;
+   |     ^^^^^^^^^^^^^^^ `a::Foo`: not accessible
+...
+LL |     type Foo = u64;
+   |     ^^^^^^^^^^^^^^^ `b::Foo`: not accessible
+
+error[E0412]: cannot find type `Bar` in this scope
+  --> $DIR/inaccessible_type_aliases.rs:12:12
+   |
+LL |     let y: Bar = 100;
+   |            ^^^ not found in this scope
+   |
+note: type alias `a::Bar` exists but is inaccessible
+  --> $DIR/inaccessible_type_aliases.rs:3:5
+   |
+LL |     type Bar = u64;
+   |     ^^^^^^^^^^^^^^^ not accessible
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0412`.