Skip to content

Commit bead79e

Browse files
committed
Add note regarding argument ordering
1 parent e372ad4 commit bead79e

7 files changed

+21
-11
lines changed

src/librustc_typeck/astconv.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -464,15 +464,17 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
464464
/// Report an error that a generic argument did not match the generic parameter that was
465465
/// expected.
466466
fn generic_arg_mismatch_err(sess: &Session, arg: &GenericArg<'_>, kind: &'static str) {
467-
struct_span_err!(
467+
let mut err = struct_span_err!(
468468
sess,
469469
arg.span(),
470470
E0747,
471471
"{} provided when a {} was expected",
472472
arg.descr(),
473473
kind,
474-
)
475-
.emit();
474+
);
475+
// This note will be true as long as generic parameters are strictly ordered by their kind.
476+
err.note(&format!("{} arguments must be provided before {} arguments", kind, arg.descr()));
477+
err.emit();
476478
}
477479

478480
/// Creates the relevant generic argument substitutions

src/test/ui/const-generics/const-arg-type-arg-misordered.stderr

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ error[E0747]: constant provided when a type was expected
1111
|
1212
LL | fn foo<const N: usize>() -> Array<N, ()> {
1313
| ^
14+
|
15+
= note: type arguments must be provided before constant arguments
1416

1517
error: aborting due to previous error
1618

src/test/ui/const-generics/const-param-before-other-params.stderr

-8
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,5 @@ error: type parameters must be declared prior to const parameters
1010
LL | fn foo<const X: (), T>(_: &T) {
1111
| --------------^- help: reorder the parameters: lifetimes, then types, then consts: `<T, const X: ()>`
1212

13-
warning: the feature `const_generics` is incomplete and may cause the compiler to crash
14-
--> $DIR/const-param-before-other-params.rs:1:12
15-
|
16-
LL | #![feature(const_generics)]
17-
| ^^^^^^^^^^^^^^
18-
|
19-
= note: `#[warn(incomplete_features)]` on by default
20-
2113
error: aborting due to 2 previous errors
2214

src/test/ui/parser/issue-14303-fncall.stderr

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ error[E0747]: type provided when a lifetime was expected
33
|
44
LL | .collect::<Vec<S<_, 'a>>>();
55
| ^
6+
|
7+
= note: lifetime arguments must be provided before type arguments
68

79
error: aborting due to previous error
810

src/test/ui/parser/issue-14303-path.stderr

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ error[E0747]: type provided when a lifetime was expected
33
|
44
LL | fn bar<'a, 'b, 'c, T>(x: foo::X<'a, T, 'b, 'c>) {}
55
| ^
6+
|
7+
= note: lifetime arguments must be provided before type arguments
68

79
error: aborting due to previous error
810

src/test/ui/suggestions/suggest-move-types.stderr

+8
Original file line numberDiff line numberDiff line change
@@ -79,24 +79,32 @@ error[E0747]: type provided when a lifetime was expected
7979
|
8080
LL | struct Al<'a, T, M: OneWithLifetime<A=(), T, 'a>> {
8181
| ^
82+
|
83+
= note: lifetime arguments must be provided before type arguments
8284

8385
error[E0747]: type provided when a lifetime was expected
8486
--> $DIR/suggest-move-types.rs:48:71
8587
|
8688
LL | struct Bl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<A=(), B=(), C=(), T, U, V, 'a, 'b, 'c>> {
8789
| ^
90+
|
91+
= note: lifetime arguments must be provided before type arguments
8892

8993
error[E0747]: lifetime provided when a type was expected
9094
--> $DIR/suggest-move-types.rs:64:56
9195
|
9296
LL | struct Cl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<T, 'a, A=(), B=(), C=(), U, 'b, V, 'c>> {
9397
| ^^
98+
|
99+
= note: type arguments must be provided before lifetime arguments
94100

95101
error[E0747]: lifetime provided when a type was expected
96102
--> $DIR/suggest-move-types.rs:80:56
97103
|
98104
LL | struct Dl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<T, 'a, A=(), B=(), U, 'b, C=(), V, 'c>> {
99105
| ^^
106+
|
107+
= note: type arguments must be provided before lifetime arguments
100108

101109
error: aborting due to 12 previous errors
102110

src/test/ui/traits/trait-object-vs-lifetime.stderr

+2
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ error[E0747]: type provided when a lifetime was expected
2727
|
2828
LL | let _: S<dyn 'static +, 'static>;
2929
| ^^^^^^^^^^^^^
30+
|
31+
= note: lifetime arguments must be provided before type arguments
3032

3133
error: aborting due to 5 previous errors
3234

0 commit comments

Comments
 (0)