Move generic arg / param validation to create_substs_for_generic_args

This commit is contained in:
varkor 2020-01-21 23:07:07 +00:00
parent 750e673491
commit 039045c49b
21 changed files with 192 additions and 110 deletions

View file

@ -0,0 +1,10 @@
#![feature(const_generics)]
//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash
type Array<T, const N: usize> = [T; N];
fn foo<const N: usize>() -> Array<N, ()> { //~ ERROR constant provided when a type was expected
unimplemented!()
}
fn main() {}

View file

@ -0,0 +1,17 @@
warning: the feature `const_generics` is incomplete and may cause the compiler to crash
--> $DIR/const-arg-type-arg-misordered.rs:1:12
|
LL | #![feature(const_generics)]
| ^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default
error[E0747]: constant provided when a type was expected
--> $DIR/const-arg-type-arg-misordered.rs:6:35
|
LL | fn foo<const N: usize>() -> Array<N, ()> {
| ^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0747`.

View file

@ -0,0 +1,10 @@
// check-pass
#![feature(const_generics)]
//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash
struct Foo<const A: usize, const B: usize>;
impl<const A: usize> Foo<1, A> {} // ok
fn main() {}

View file

@ -0,0 +1,8 @@
warning: the feature `const_generics` is incomplete and may cause the compiler to crash
--> $DIR/const-param-after-const-literal-arg.rs:3:12
|
LL | #![feature(const_generics)]
| ^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default

View file

@ -1,4 +1,5 @@
#![feature(const_generics)]
//~^ WARN the feature `const_generics` is incomplete and may cause the compiler to crash
fn bar<const X: (), 'a>(_: &'a ()) {
//~^ ERROR lifetime parameters must be declared prior to const parameters

View file

@ -1,14 +1,22 @@
error: lifetime parameters must be declared prior to const parameters
--> $DIR/const-param-before-other-params.rs:3:21
--> $DIR/const-param-before-other-params.rs:4:21
|
LL | fn bar<const X: (), 'a>(_: &'a ()) {
| --------------^^- help: reorder the parameters: lifetimes, then types, then consts: `<'a, const X: ()>`
error: type parameters must be declared prior to const parameters
--> $DIR/const-param-before-other-params.rs:7:21
--> $DIR/const-param-before-other-params.rs:8:21
|
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

View file

@ -11,7 +11,7 @@ fn foo<'a, 'b>(start: &'a usize, end: &'a usize) {
let _x = (*start..*end)
.map(|x| S { a: start, b: end })
.collect::<Vec<S<_, 'a>>>();
//~^ ERROR lifetime arguments must be declared prior to type arguments
//~^ ERROR type provided when a lifetime was expected
}
fn main() {}

View file

@ -1,8 +1,9 @@
error: lifetime arguments must be declared prior to type arguments
--> $DIR/issue-14303-fncall.rs:13:29
error[E0747]: type provided when a lifetime was expected
--> $DIR/issue-14303-fncall.rs:13:26
|
LL | .collect::<Vec<S<_, 'a>>>();
| ^^
| ^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0747`.

View file

@ -8,6 +8,6 @@ mod foo {
}
fn bar<'a, 'b, 'c, T>(x: foo::X<'a, T, 'b, 'c>) {}
//~^ ERROR lifetime arguments must be declared prior to type arguments
//~^ ERROR type provided when a lifetime was expected
fn main() {}

View file

@ -1,8 +1,9 @@
error: lifetime arguments must be declared prior to type arguments
--> $DIR/issue-14303-path.rs:10:40
error[E0747]: type provided when a lifetime was expected
--> $DIR/issue-14303-path.rs:10:37
|
LL | fn bar<'a, 'b, 'c, T>(x: foo::X<'a, T, 'b, 'c>) {}
| ^^ ^^
| ^
error: aborting due to previous error
For more information about this error, try `rustc --explain E0747`.

View file

@ -33,7 +33,7 @@ struct A<T, M: One<A=(), T>> { //~ ERROR associated type bindings must be declar
struct Al<'a, T, M: OneWithLifetime<A=(), T, 'a>> {
//~^ ERROR associated type bindings must be declared after generic parameters
//~^^ ERROR lifetime arguments must be declared prior to type arguments
//~^^ ERROR type provided when a lifetime was expected
m: M,
t: &'a T,
}
@ -47,7 +47,7 @@ struct B<T, U, V, M: Three<A=(), B=(), C=(), T, U, V>> { //~ ERROR associated ty
struct Bl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<A=(), B=(), C=(), T, U, V, 'a, 'b, 'c>> {
//~^ ERROR associated type bindings must be declared after generic parameters
//~^^ ERROR lifetime arguments must be declared prior to type arguments
//~^^ ERROR type provided when a lifetime was expected
m: M,
t: &'a T,
u: &'b U,
@ -63,7 +63,7 @@ struct C<T, U, V, M: Three<T, A=(), B=(), C=(), U, V>> { //~ ERROR associated ty
struct Cl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<T, 'a, A=(), B=(), C=(), U, 'b, V, 'c>> {
//~^ ERROR associated type bindings must be declared after generic parameters
//~^^ ERROR lifetime arguments must be declared prior to type arguments
//~^^ ERROR lifetime provided when a type was expected
m: M,
t: &'a T,
u: &'b U,
@ -79,7 +79,7 @@ struct D<T, U, V, M: Three<T, A=(), B=(), U, C=(), V>> { //~ ERROR associated ty
struct Dl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<T, 'a, A=(), B=(), U, 'b, C=(), V, 'c>> {
//~^ ERROR associated type bindings must be declared after generic parameters
//~^^ ERROR lifetime arguments must be declared prior to type arguments
//~^^ ERROR lifetime provided when a type was expected
m: M,
t: &'a T,
u: &'b U,

View file

@ -74,29 +74,30 @@ LL | struct Dl<'a, 'b, 'c, T, U, V, M: ThreeWithLifetime<T, 'a, A=(), B=(), U, '
| | this associated type binding should be moved after the generic parameters
| this associated type binding should be moved after the generic parameters
error: lifetime arguments must be declared prior to type arguments
--> $DIR/suggest-move-types.rs:34:46
error[E0747]: type provided when a lifetime was expected
--> $DIR/suggest-move-types.rs:34:43
|
LL | struct Al<'a, T, M: OneWithLifetime<A=(), T, 'a>> {
| ^^
| ^
error: lifetime arguments must be declared prior to type arguments
--> $DIR/suggest-move-types.rs:48:80
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>> {
| ^^ ^^ ^^
| ^
error: lifetime arguments must be declared prior to 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>> {
| ^^ ^^ ^^
| ^^
error: lifetime arguments must be declared prior to type 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>> {
| ^^ ^^ ^^
| ^^
error: aborting due to 12 previous errors
For more information about this error, try `rustc --explain E0747`.

View file

@ -12,6 +12,6 @@ fn main() {
//~^ ERROR wrong number of lifetime arguments: expected 1, found 2
//~| ERROR wrong number of type arguments: expected 1, found 0
let _: S<dyn 'static +, 'static>;
//~^ ERROR lifetime arguments must be declared prior to type arguments
//~^ ERROR type provided when a lifetime was expected
//~| ERROR at least one trait is required for an object type
}

View file

@ -1,9 +1,3 @@
error: lifetime arguments must be declared prior to type arguments
--> $DIR/trait-object-vs-lifetime.rs:14:29
|
LL | let _: S<dyn 'static +, 'static>;
| ^^^^^^^
error[E0224]: at least one trait is required for an object type
--> $DIR/trait-object-vs-lifetime.rs:9:23
|
@ -28,6 +22,13 @@ error[E0224]: at least one trait is required for an object type
LL | let _: S<dyn 'static +, 'static>;
| ^^^^^^^^^^^^^
error[E0747]: type provided when a lifetime was expected
--> $DIR/trait-object-vs-lifetime.rs:14:14
|
LL | let _: S<dyn 'static +, 'static>;
| ^^^^^^^^^^^^^
error: aborting due to 5 previous errors
For more information about this error, try `rustc --explain E0107`.
Some errors have detailed explanations: E0107, E0747.
For more information about an error, try `rustc --explain E0107`.