about summary refs log tree commit diff
diff options
context:
space:
mode:
authorGuillaume Gomez <guillaume1.gomez@gmail.com>2020-10-19 18:20:23 +0200
committerGitHub <noreply@github.com>2020-10-19 18:20:23 +0200
commit684fbd50ab49edfcfaec57c9b5e3cf6c05a3107f (patch)
tree43437d03514190362bdcbeaa2120e44b98ee6b7d
parenta6919ef889fe48daf796268b9619f64020ca4afa (diff)
parentc0d29fe7d7a32dbadad161fe8a39bc996da3c633 (diff)
downloadrust-684fbd50ab49edfcfaec57c9b5e3cf6c05a3107f.tar.gz
rust-684fbd50ab49edfcfaec57c9b5e3cf6c05a3107f.zip
Rollup merge of #78089 - varkor:opt_const_param_of-error, r=lcnr
Fix issue with specifying generic arguments for primitive types

Fixes https://github.com/rust-lang/rust/issues/78005.

r? @lcnr
-rw-r--r--compiler/rustc_typeck/src/collect/type_of.rs16
-rw-r--r--src/test/ui/usize-generic-argument-parent.rs5
-rw-r--r--src/test/ui/usize-generic-argument-parent.stderr9
3 files changed, 24 insertions, 6 deletions
diff --git a/compiler/rustc_typeck/src/collect/type_of.rs b/compiler/rustc_typeck/src/collect/type_of.rs
index 5e8c6211408..a754d4dbac7 100644
--- a/compiler/rustc_typeck/src/collect/type_of.rs
+++ b/compiler/rustc_typeck/src/collect/type_of.rs
@@ -112,12 +112,16 @@ pub(super) fn opt_const_param_of(tcx: TyCtxt<'_>, def_id: LocalDefId) -> Option<
                         tcx.sess.delay_span_bug(tcx.def_span(def_id), "anon const with Res::Err");
                         return None;
                     }
-                    _ => span_bug!(
-                        DUMMY_SP,
-                        "unexpected anon const res {:?} in path: {:?}",
-                        res,
-                        path,
-                    ),
+                    _ => {
+                        // If the user tries to specify generics on a type that does not take them,
+                        // e.g. `usize<T>`, we may hit this branch, in which case we treat it as if
+                        // no arguments have been passed. An error should already have been emitted.
+                        tcx.sess.delay_span_bug(
+                            tcx.def_span(def_id),
+                            &format!("unexpected anon const res {:?} in path: {:?}", res, path),
+                        );
+                        return None;
+                    }
                 };
 
                 generics
diff --git a/src/test/ui/usize-generic-argument-parent.rs b/src/test/ui/usize-generic-argument-parent.rs
new file mode 100644
index 00000000000..46b06e2b366
--- /dev/null
+++ b/src/test/ui/usize-generic-argument-parent.rs
@@ -0,0 +1,5 @@
+fn foo() {
+    let x: usize<foo>; //~ ERROR const arguments are not allowed for this type
+}
+
+fn main() {}
diff --git a/src/test/ui/usize-generic-argument-parent.stderr b/src/test/ui/usize-generic-argument-parent.stderr
new file mode 100644
index 00000000000..f1eae3b5008
--- /dev/null
+++ b/src/test/ui/usize-generic-argument-parent.stderr
@@ -0,0 +1,9 @@
+error[E0109]: const arguments are not allowed for this type
+  --> $DIR/usize-generic-argument-parent.rs:2:18
+   |
+LL |     let x: usize<foo>;
+   |                  ^^^ const argument not allowed
+
+error: aborting due to previous error
+
+For more information about this error, try `rustc --explain E0109`.