Recover from item trailing semicolon

This commit is contained in:
Esteban Küber 2019-01-13 17:29:32 -08:00
parent c2d381d39d
commit 3874c7755f
7 changed files with 113 additions and 30 deletions

View file

@ -1,5 +1,6 @@
struct Struct {
a: usize,
}; //~ ERROR expected item, found `;`
};
//~^ ERROR expected item, found `;`
fn main() {}

View file

@ -1,8 +1,8 @@
error: expected item, found `;`
--> $DIR/issue-46186.rs:3:2
|
LL | }; //~ ERROR expected item, found `;`
| ^ help: consider removing this semicolon
LL | };
| ^ help: remove this semicolon
|
= help: braced struct declarations are not followed by a semicolon

View file

@ -1,2 +1,2 @@
#![allow(unused_variables)]; //~ ERROR expected item, found `;`
fn main() {}
fn foo() {}

View file

@ -2,7 +2,12 @@ error: expected item, found `;`
--> $DIR/issue-49040.rs:1:28
|
LL | #![allow(unused_variables)]; //~ ERROR expected item, found `;`
| ^ help: consider removing this semicolon
| ^ help: remove this semicolon
error: aborting due to previous error
error[E0601]: `main` function not found in crate `issue_49040`
|
= note: consider adding a `main` function to `$DIR/issue-49040.rs`
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0601`.

View file

@ -0,0 +1,16 @@
// verify that after encountering a semicolon after an item the parser recovers
mod M {};
//~^ ERROR expected item, found `;`
struct S {};
//~^ ERROR expected item, found `;`
fn foo(a: usize) {};
//~^ ERROR expected item, found `;`
fn main() {
struct X {}; // ok
let _: usize = S {};
//~^ ERROR mismatched types
let _: usize = X {};
//~^ ERROR mismatched types
foo("");
//~^ ERROR mismatched types
}

View file

@ -0,0 +1,50 @@
error: expected item, found `;`
--> $DIR/recover-from-semicolon-trailing-item.rs:2:9
|
LL | mod M {};
| ^ help: remove this semicolon
error: expected item, found `;`
--> $DIR/recover-from-semicolon-trailing-item.rs:4:12
|
LL | struct S {};
| ^ help: remove this semicolon
|
= help: braced struct declarations are not followed by a semicolon
error: expected item, found `;`
--> $DIR/recover-from-semicolon-trailing-item.rs:6:20
|
LL | fn foo(a: usize) {};
| ^ help: remove this semicolon
error[E0308]: mismatched types
--> $DIR/recover-from-semicolon-trailing-item.rs:10:20
|
LL | let _: usize = S {};
| ^^^^ expected usize, found struct `S`
|
= note: expected type `usize`
found type `S`
error[E0308]: mismatched types
--> $DIR/recover-from-semicolon-trailing-item.rs:12:20
|
LL | let _: usize = X {};
| ^^^^ expected usize, found struct `main::X`
|
= note: expected type `usize`
found type `main::X`
error[E0308]: mismatched types
--> $DIR/recover-from-semicolon-trailing-item.rs:14:9
|
LL | foo("");
| ^^ expected usize, found reference
|
= note: expected type `usize`
found type `&'static str`
error: aborting due to 6 previous errors
For more information about this error, try `rustc --explain E0308`.