mirror of
https://github.com/rust-lang/rust.git
synced 2024-10-31 22:41:50 +00:00
Expect extern fn with no body when parsing
Also add a test case for inserting a semicolon on extern fns. Without this fix, we got an error like this: error: expected one of `->`, `where`, or `{`, found `}` --> chk.rs:3:1 | 2 | fn foo() | --- - expected one of `->`, `where`, or `{` | | | while parsing this `fn` 3 | } | ^ unexpected token Since this is inside an extern block, you're required to write function prototypes with no body. This fixes a regression, and adds a test case for it.
This commit is contained in:
parent
61995926d2
commit
6611567f9e
@ -950,7 +950,7 @@ impl<'a> Parser<'a> {
|
||||
&mut self,
|
||||
force_collect: ForceCollect,
|
||||
) -> PResult<'a, Option<Option<P<ForeignItem>>>> {
|
||||
let fn_parse_mode = FnParseMode { req_name: |_| true, req_body: true };
|
||||
let fn_parse_mode = FnParseMode { req_name: |_| true, req_body: false };
|
||||
Ok(self.parse_item_(fn_parse_mode, force_collect)?.map(
|
||||
|Item { attrs, id, span, vis, ident, kind, tokens }| {
|
||||
let kind = match ForeignItemKind::try_from(kind) {
|
||||
|
@ -0,0 +1,9 @@
|
||||
// run-rustfix
|
||||
|
||||
#[allow(dead_code)]
|
||||
|
||||
extern "C" {
|
||||
fn foo(); //~ERROR expected `;`
|
||||
}
|
||||
|
||||
fn main() {}
|
@ -0,0 +1,9 @@
|
||||
// run-rustfix
|
||||
|
||||
#[allow(dead_code)]
|
||||
|
||||
extern "C" {
|
||||
fn foo() //~ERROR expected `;`
|
||||
}
|
||||
|
||||
fn main() {}
|
@ -0,0 +1,10 @@
|
||||
error: expected `;`, found `}`
|
||||
--> $DIR/suggest-semicolon-for-fn-in-extern-block.rs:6:11
|
||||
|
|
||||
LL | fn foo()
|
||||
| ^ help: add `;` here
|
||||
LL | }
|
||||
| - unexpected token
|
||||
|
||||
error: aborting due to previous error
|
||||
|
Loading…
Reference in New Issue
Block a user