diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index 16ab798708c..16bfebef2c4 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -1925,11 +1925,8 @@ impl<'a> Parser<'a> { } }; let mut err = - self.struct_span_err(param.ident.span, "unexpected `const` parameter declaration"); - err.span_label( - param.ident.span, - "expected a `const` expression, not a parameter declaration", - ); + self.struct_span_err(param.span(), "unexpected `const` parameter declaration"); + err.span_label(param.span(), "expected a `const` expression, not a parameter declaration"); if let (Some(generics), Ok(snippet)) = (ty_generics, self.sess.source_map().span_to_snippet(param.span())) { diff --git a/src/test/ui/parser/const-param-decl-on-type-instead-of-impl.rs b/src/test/ui/parser/const-param-decl-on-type-instead-of-impl.rs index ecdfce1e19e..53e3c6f9605 100644 --- a/src/test/ui/parser/const-param-decl-on-type-instead-of-impl.rs +++ b/src/test/ui/parser/const-param-decl-on-type-instead-of-impl.rs @@ -4,3 +4,12 @@ impl NInts {} //~ ERROR unexpected `const` parameter declaration fn main() { let _: () = 42; //~ ERROR mismatched types } + +fn banana(a: >::BAR) {} +//~^ ERROR unexpected `const` parameter declaration +//~| ERROR cannot find type `T` in this scope +fn chaenomeles() { + path::path::Struct::() + //~^ ERROR unexpected `const` parameter declaration + //~| ERROR failed to resolve: use of undeclared crate or module `path` +} diff --git a/src/test/ui/parser/const-param-decl-on-type-instead-of-impl.stderr b/src/test/ui/parser/const-param-decl-on-type-instead-of-impl.stderr index 07c7c69f8d6..96885d11ee0 100644 --- a/src/test/ui/parser/const-param-decl-on-type-instead-of-impl.stderr +++ b/src/test/ui/parser/const-param-decl-on-type-instead-of-impl.stderr @@ -1,14 +1,38 @@ error: unexpected `const` parameter declaration - --> $DIR/const-param-decl-on-type-instead-of-impl.rs:2:18 + --> $DIR/const-param-decl-on-type-instead-of-impl.rs:2:12 | LL | impl NInts {} - | ^ expected a `const` expression, not a parameter declaration + | ^^^^^^^^^^^^^^ expected a `const` expression, not a parameter declaration | help: `const` parameters must be declared for the `impl` | LL | impl NInts {} | ++++++++++++++++ ~ +error: unexpected `const` parameter declaration + --> $DIR/const-param-decl-on-type-instead-of-impl.rs:8:17 + | +LL | fn banana(a: >::BAR) {} + | ^^^^^^^^^^^^^^ expected a `const` expression, not a parameter declaration + +error: unexpected `const` parameter declaration + --> $DIR/const-param-decl-on-type-instead-of-impl.rs:12:26 + | +LL | path::path::Struct::() + | ^^^^^^^^^^^^^^ expected a `const` expression, not a parameter declaration + +error[E0433]: failed to resolve: use of undeclared crate or module `path` + --> $DIR/const-param-decl-on-type-instead-of-impl.rs:12:5 + | +LL | path::path::Struct::() + | ^^^^ use of undeclared crate or module `path` + +error[E0412]: cannot find type `T` in this scope + --> $DIR/const-param-decl-on-type-instead-of-impl.rs:8:15 + | +LL | fn banana(a: >::BAR) {} + | ^ not found in this scope + error[E0308]: mismatched types --> $DIR/const-param-decl-on-type-instead-of-impl.rs:5:17 | @@ -17,6 +41,7 @@ LL | let _: () = 42; | | | expected due to this -error: aborting due to 2 previous errors +error: aborting due to 6 previous errors -For more information about this error, try `rustc --explain E0308`. +Some errors have detailed explanations: E0308, E0412, E0433. +For more information about an error, try `rustc --explain E0308`.