From: Owen Avery <powerboat9.ga...@gmail.com> gcc/rust/ChangeLog:
* parse/rust-parse-impl.h (Parser::parse_stmt): Handle unsafe expression statements. gcc/testsuite/ChangeLog: * rust/compile/issue-1422.rs: New test. Signed-off-by: Owen Avery <powerboat9.ga...@gmail.com> --- gcc/rust/parse/rust-parse-impl.h | 10 +++++++++- gcc/testsuite/rust/compile/issue-1422.rs | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/rust/compile/issue-1422.rs diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h index 1e5b2dc85ed..db32803ddbe 100644 --- a/gcc/rust/parse/rust-parse-impl.h +++ b/gcc/rust/parse/rust-parse-impl.h @@ -6131,7 +6131,15 @@ Parser<ManagedTokenSource>::parse_stmt (ParseRestrictions restrictions) /* if any of these (should be all possible VisItem prefixes), parse a * VisItem can't parse item because would require reparsing outer * attributes */ - return parse_vis_item (std::move (outer_attrs)); + // may also be unsafe block + if (lexer.peek_token (1)->get_id () == LEFT_CURLY) + { + return parse_expr_stmt (std::move (outer_attrs), restrictions); + } + else + { + return parse_vis_item (std::move (outer_attrs)); + } break; case SUPER: case SELF: diff --git a/gcc/testsuite/rust/compile/issue-1422.rs b/gcc/testsuite/rust/compile/issue-1422.rs new file mode 100644 index 00000000000..b178cda185e --- /dev/null +++ b/gcc/testsuite/rust/compile/issue-1422.rs @@ -0,0 +1,7 @@ +macro_rules! test { + () => { unsafe {} }; +} + +fn main() { + test!(); +} -- 2.40.0