parse: allow type Foo: Ord syntactically.

This commit is contained in:
Mazdak Farrokhzad 2020-02-21 23:00:27 +01:00
parent 14442e0ebb
commit 9f3dfd29a2
18 changed files with 160 additions and 61 deletions

View file

@ -5,6 +5,6 @@ type A where 'a:, = u8; // OK
type A where 'a: 'b + 'c = u8; // OK
type A where = u8; // OK
type A where 'a: 'b + = u8; // OK
type A where , = u8; //~ ERROR expected one of `=`, lifetime, or type, found `,`
type A where , = u8; //~ ERROR expected one of `;`, `=`, lifetime, or type, found `,`
fn main() {}

View file

@ -1,8 +1,8 @@
error: expected one of `=`, lifetime, or type, found `,`
error: expected one of `;`, `=`, lifetime, or type, found `,`
--> $DIR/bounds-lifetime-where.rs:8:14
|
LL | type A where , = u8;
| ^ expected one of `=`, lifetime, or type
| ^ expected one of `;`, `=`, lifetime, or type
error: aborting due to previous error

View file

@ -0,0 +1,20 @@
fn main() {}
fn semantics() {
type A: Ord;
//~^ ERROR bounds on `type`s in this context have no effect
//~| ERROR free type alias without body
type B: Ord = u8;
//~^ ERROR bounds on `type`s in this context have no effect
type C: Ord where 'static: 'static = u8;
//~^ ERROR bounds on `type`s in this context have no effect
type D<_T>: Ord;
//~^ ERROR bounds on `type`s in this context have no effect
//~| ERROR free type alias without body
type E<_T>: Ord = u8;
//~^ ERROR bounds on `type`s in this context have no effect
//~| ERROR type parameter `_T` is unused
type F<_T>: Ord where 'static: 'static = u8;
//~^ ERROR bounds on `type`s in this context have no effect
//~| ERROR type parameter `_T` is unused
}

View file

@ -0,0 +1,67 @@
error: free type alias without body
--> $DIR/item-free-type-bounds-semantic-fail.rs:4:5
|
LL | type A: Ord;
| ^^^^^^^^^^^-
| |
| help: provide a definition for the type: `= <type>;`
error: bounds on `type`s in this context have no effect
--> $DIR/item-free-type-bounds-semantic-fail.rs:4:13
|
LL | type A: Ord;
| ^^^
error: bounds on `type`s in this context have no effect
--> $DIR/item-free-type-bounds-semantic-fail.rs:7:13
|
LL | type B: Ord = u8;
| ^^^
error: bounds on `type`s in this context have no effect
--> $DIR/item-free-type-bounds-semantic-fail.rs:9:13
|
LL | type C: Ord where 'static: 'static = u8;
| ^^^
error: free type alias without body
--> $DIR/item-free-type-bounds-semantic-fail.rs:11:5
|
LL | type D<_T>: Ord;
| ^^^^^^^^^^^^^^^-
| |
| help: provide a definition for the type: `= <type>;`
error: bounds on `type`s in this context have no effect
--> $DIR/item-free-type-bounds-semantic-fail.rs:11:17
|
LL | type D<_T>: Ord;
| ^^^
error: bounds on `type`s in this context have no effect
--> $DIR/item-free-type-bounds-semantic-fail.rs:14:17
|
LL | type E<_T>: Ord = u8;
| ^^^
error: bounds on `type`s in this context have no effect
--> $DIR/item-free-type-bounds-semantic-fail.rs:17:17
|
LL | type F<_T>: Ord where 'static: 'static = u8;
| ^^^
error[E0091]: type parameter `_T` is unused
--> $DIR/item-free-type-bounds-semantic-fail.rs:14:12
|
LL | type E<_T>: Ord = u8;
| ^^ unused type parameter
error[E0091]: type parameter `_T` is unused
--> $DIR/item-free-type-bounds-semantic-fail.rs:17:12
|
LL | type F<_T>: Ord where 'static: 'static = u8;
| ^^ unused type parameter
error: aborting due to 10 previous errors
For more information about this error, try `rustc --explain E0091`.

View file

@ -0,0 +1,13 @@
// check-pass
fn main() {}
#[cfg(FALSE)]
fn syntax() {
type A: Ord;
type B: Ord = u8;
type C: Ord where 'static: 'static = u8;
type D<_T>: Ord;
type E<_T>: Ord = u8;
type F<_T>: Ord where 'static: 'static = u8;
}