parse: allow type Foo: Ord syntactically.
This commit is contained in:
parent
14442e0ebb
commit
9f3dfd29a2
18 changed files with 160 additions and 61 deletions
|
|
@ -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() {}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
20
src/test/ui/parser/item-free-type-bounds-semantic-fail.rs
Normal file
20
src/test/ui/parser/item-free-type-bounds-semantic-fail.rs
Normal 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
|
||||
}
|
||||
|
|
@ -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`.
|
||||
13
src/test/ui/parser/item-free-type-bounds-syntactic-pass.rs
Normal file
13
src/test/ui/parser/item-free-type-bounds-syntactic-pass.rs
Normal 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;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue