mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-17 01:13:11 +00:00
Rollup merge of #125276 - dev-ardi:no-main-diag, r=fmease
Fix parsing of erroneously placed semicolons This closes https://github.com/rust-lang/rust/issues/124935, is a continuation of https://github.com/rust-lang/rust/pull/125245 after rebasing https://github.com/rust-lang/rust/pull/125117. Thanks ```@gurry``` for your code and sorry for making it confusing :P r? fmease
This commit is contained in:
commit
bfa98d318f
@ -58,9 +58,15 @@ impl<'a> Parser<'a> {
|
|||||||
let attrs = self.parse_inner_attributes()?;
|
let attrs = self.parse_inner_attributes()?;
|
||||||
|
|
||||||
let post_attr_lo = self.token.span;
|
let post_attr_lo = self.token.span;
|
||||||
let mut items = ThinVec::new();
|
let mut items: ThinVec<P<_>> = ThinVec::new();
|
||||||
while let Some(item) = self.parse_item(ForceCollect::No)? {
|
|
||||||
self.maybe_consume_incorrect_semicolon(Some(&item));
|
// There shouldn't be any stray semicolons before or after items.
|
||||||
|
// `parse_item` consumes the appropriate semicolons so any leftover is an error.
|
||||||
|
loop {
|
||||||
|
while self.maybe_consume_incorrect_semicolon(items.last().map(|x| &**x)) {} // Eat all bad semicolons
|
||||||
|
let Some(item) = self.parse_item(ForceCollect::No)? else {
|
||||||
|
break;
|
||||||
|
};
|
||||||
items.push(item);
|
items.push(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
// Regression test for issue #124935
|
||||||
|
// Tests that we do not erroneously emit an error about
|
||||||
|
// missing main function when the mod starts with a `;`
|
||||||
|
|
||||||
|
; //~ ERROR expected item, found `;`
|
||||||
|
fn main() { }
|
@ -0,0 +1,8 @@
|
|||||||
|
error: expected item, found `;`
|
||||||
|
--> $DIR/fn-no-semicolon-issue-124935-semi-after-item.rs:5:1
|
||||||
|
|
|
||||||
|
LL | ;
|
||||||
|
| ^ help: remove this semicolon
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
@ -1,3 +1,3 @@
|
|||||||
#![allow(unused_variables)]; //~ ERROR expected item, found `;`
|
#![allow(unused_variables)]; //~ ERROR expected item, found `;`
|
||||||
//~^ ERROR `main` function
|
|
||||||
fn foo() {}
|
fn foo() {}
|
||||||
|
//~^ ERROR `main` function
|
||||||
|
@ -5,9 +5,9 @@ LL | #![allow(unused_variables)];
|
|||||||
| ^ help: remove this semicolon
|
| ^ help: remove this semicolon
|
||||||
|
|
||||||
error[E0601]: `main` function not found in crate `issue_49040`
|
error[E0601]: `main` function not found in crate `issue_49040`
|
||||||
--> $DIR/issue-49040.rs:1:29
|
--> $DIR/issue-49040.rs:2:12
|
||||||
|
|
|
|
||||||
LL | #![allow(unused_variables)];
|
LL | fn foo() {}
|
||||||
| ^ consider adding a `main` function to `$DIR/issue-49040.rs`
|
| ^ consider adding a `main` function to `$DIR/issue-49040.rs`
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors
|
||||||
|
@ -0,0 +1,5 @@
|
|||||||
|
// Regression test for issue #124935
|
||||||
|
// Tests that we still emit an error after an item.
|
||||||
|
|
||||||
|
fn main() { }
|
||||||
|
; //~ ERROR expected item, found `;`
|
@ -0,0 +1,10 @@
|
|||||||
|
error: expected item, found `;`
|
||||||
|
--> $DIR/missing-main-issue-124935-semi-after-item.rs:5:1
|
||||||
|
|
|
||||||
|
LL | ;
|
||||||
|
| ^ help: remove this semicolon
|
||||||
|
|
|
||||||
|
= help: function declarations are not followed by a semicolon
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
Loading…
Reference in New Issue
Block a user