Fix the issue of wrong diagnosis for extern pub fn
This commit is contained in:
parent
b7bc6f88ac
commit
f25463e848
@ -2182,7 +2182,11 @@ impl<'a> Parser<'a> {
|
|||||||
// `extern ABI fn`
|
// `extern ABI fn`
|
||||||
|| self.check_keyword_case(kw::Extern, case)
|
|| self.check_keyword_case(kw::Extern, case)
|
||||||
&& self.look_ahead(1, |t| t.can_begin_literal_maybe_minus())
|
&& self.look_ahead(1, |t| t.can_begin_literal_maybe_minus())
|
||||||
&& self.look_ahead(2, |t| t.is_keyword_case(kw::Fn, case))
|
&& (self.look_ahead(2, |t| t.is_keyword_case(kw::Fn, case)) ||
|
||||||
|
// this branch is only for better diagnostic in later, `pub` is not allowed here
|
||||||
|
(self.may_recover()
|
||||||
|
&& self.look_ahead(2, |t| t.is_keyword(kw::Pub))
|
||||||
|
&& self.look_ahead(3, |t| t.is_keyword_case(kw::Fn, case))))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parses all the "front matter" (or "qualifiers") for a `fn` declaration,
|
/// Parses all the "front matter" (or "qualifiers") for a `fn` declaration,
|
||||||
|
9
tests/ui/parser/issue-113342.rs
Normal file
9
tests/ui/parser/issue-113342.rs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
#[link(name = "my_c_library")]
|
||||||
|
extern "C" {
|
||||||
|
fn my_c_function(x: i32) -> bool;
|
||||||
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
extern "C" pub fn id(x: i32) -> i32 { x } //~ ERROR expected `fn`, found keyword `pub`
|
||||||
|
|
||||||
|
fn main() {}
|
11
tests/ui/parser/issue-113342.stderr
Normal file
11
tests/ui/parser/issue-113342.stderr
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
error: expected `fn`, found keyword `pub`
|
||||||
|
--> $DIR/issue-113342.rs:7:12
|
||||||
|
|
|
||||||
|
LL | extern "C" pub fn id(x: i32) -> i32 { x }
|
||||||
|
| -----------^^^
|
||||||
|
| | |
|
||||||
|
| | expected `fn`
|
||||||
|
| help: visibility `pub` must come before `extern "C"`: `pub extern "C"`
|
||||||
|
|
||||||
|
error: aborting due to previous error
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user