diff options
| author | varkor <github@varkor.com> | 2020-02-22 02:35:24 +0000 |
|---|---|---|
| committer | varkor <github@varkor.com> | 2020-02-22 11:34:29 +0000 |
| commit | bead79ebc6d0f605f42a0f8315ce9f5fe5764b99 (patch) | |
| tree | bcb99add3610d34e1db29924d8579140d684e15b | |
| parent | e372ad48001920a77464c94cb2f48702af7e9ad3 (diff) | |
| download | rust-bead79ebc6d0f605f42a0f8315ce9f5fe5764b99.tar.gz rust-bead79ebc6d0f605f42a0f8315ce9f5fe5764b99.zip | |
Add note regarding argument ordering
7 files changed, 21 insertions, 11 deletions
diff --git a/src/librustc_typeck/astconv.rs b/src/librustc_typeck/astconv.rs index 9a80452aef3..49f38d86d91 100644 --- a/src/librustc_typeck/astconv.rs +++ b/src/librustc_typeck/astconv.rs @@ -464,15 +464,17 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { /// Report an error that a generic argument did not match the generic parameter that was /// expected. fn generic_arg_mismatch_err(sess: &Session, arg: &GenericArg<'_>, kind: &'static str) { - struct_span_err!( + let mut err = struct_span_err!( sess, arg.span(), E0747, "{} provided when a {} was expected", arg.descr(), kind, - ) - .emit(); + ); + // This note will be true as long as generic parameters are strictly ordered by their kind. + err.note(&format!("{} arguments must be provided before {} arguments", kind, arg.descr())); + err.emit(); } /// Creates the relevant generic argument substitutions diff --git a/src/test/ui/const-generics/const-arg-type-arg-misordered.stderr b/src/test/ui/const-generics/const-arg-type-arg-misordered.stderr index 225e1cd547e..150a6011c2c 100644 --- a/src/test/ui/const-generics/const-arg-type-arg-misordered.stderr +++ b/src/test/ui/const-generics/const-arg-type-arg-misordered.stderr @@ -11,6 +11,8 @@ error[E0747]: constant provided when a type was expected | LL | fn foo<const N: usize>() -> Array<N, ()> { | ^ + | + = note: type arguments must be provided before constant arguments error: aborting due to previous error diff --git a/src/test/ui/const-generics/const-param-before-other-params.stderr b/src/test/ui/const-generics/const-param-before-other-params.stderr index fccf732de4c..9b18b8c79ed 100644 --- a/src/test/ui/const-generics/const-param-before-other-params.stderr +++ b/src/test/ui/const-generics/const-param-before-other-params.stderr @@ -10,13 +10,5 @@ error: type parameters must be declared prior to const parameters LL | fn foo<const X: (), T>(_: &T) { | --------------^- help: reorder the parameters: lifetimes, then types, then consts: `<T, const X: ()>` -warning: the feature `const_generics` is incomplete and may cause the compiler to crash - --> $DIR/const-param-before-other-params.rs:1:12 - | -LL | #![feature(const_generics)] - | ^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - error: aborting due to 2 previous errors diff --git a/src/test/ui/parser/issue-14303-fncall.stderr b/src/test/ui/parser/issue-14303-fncall.stderr index cdda0d001c7..10954223713 100644 --- a/src/test/ui/parser/issue-14303-fncall.stderr +++ b/src/test/ui/parser/issue-14303-fncall.stderr @@ -3,6 +3,8 @@ error[E0747]: type provided when a lifetime was expected | LL | .collect::<Vec<S<_, 'a>>>(); | ^ + | + = note: lifetime arguments must be provided before type arguments error: aborting due to previous error diff --git a/src/test/ui/parser/issue-14303-path.stderr b/src/test/ui/parser/issue-14303-path.stderr index 841e63ecbe9..c1ad2332b5b 100644 --- a/src/test/ui/parser/issue-14303-path.stderr +++ b/src/test/ui/parser/issue-14303-path.stderr @@ -3,6 +3,8 @@ error[E0747]: type provided when a lifetime was expected | LL | fn bar<'a, 'b, 'c, T>(x: foo::X<'a, T, 'b, 'c>) {} | ^ + | + = note: lifetime arguments must be provided before type arguments error: aborting due to previous error diff --git a/src/test/ui/suggestions/suggest-move-types.stderr b/src/test/ui/suggestions/suggest-move-types.stderr index 07ad1a31508..ac91813f928 100644 --- a/src/test/ui/suggestions/suggest-move-types.stderr +++ b/src/test/ui/suggestions/suggest-move-types.stderr @@ -79,24 +79,32 @@ error[E0747]: type provided when a lifetime was expected | LL | struct Al<'a, T, M: OneWithLifetime<A=(), T, 'a>> { | ^ + | + = note: lifetime arguments must be provided before type arguments error[E0747]: type provided when a lifetime was expected --> $DIR/suggest-move-types.rs:48:71 | LL | struct Bl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<A=(), B=(), C=(), T, U, V, 'a, 'b, 'c>> { | ^ + | + = note: lifetime arguments must be provided before type arguments error[E0747]: lifetime provided when a type was expected --> $DIR/suggest-move-types.rs:64:56 | LL | struct Cl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<T, 'a, A=(), B=(), C=(), U, 'b, V, 'c>> { | ^^ + | + = note: type arguments must be provided before lifetime arguments error[E0747]: lifetime provided when a type was expected --> $DIR/suggest-move-types.rs:80:56 | LL | struct Dl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<T, 'a, A=(), B=(), U, 'b, C=(), V, 'c>> { | ^^ + | + = note: type arguments must be provided before lifetime arguments error: aborting due to 12 previous errors diff --git a/src/test/ui/traits/trait-object-vs-lifetime.stderr b/src/test/ui/traits/trait-object-vs-lifetime.stderr index d1e5a65c0ad..04529fb8cfa 100644 --- a/src/test/ui/traits/trait-object-vs-lifetime.stderr +++ b/src/test/ui/traits/trait-object-vs-lifetime.stderr @@ -27,6 +27,8 @@ error[E0747]: type provided when a lifetime was expected | LL | let _: S<dyn 'static +, 'static>; | ^^^^^^^^^^^^^ + | + = note: lifetime arguments must be provided before type arguments error: aborting due to 5 previous errors |
