[gcc/devel/rust/master] Fix issue with parsing unsafe block expression statements
Thomas Schwinge
tschwinge@gcc.gnu.org
Mon Feb 20 10:30:58 GMT 2023
https://gcc.gnu.org/g:3448f0fa239430156d7ebbcab6cf1abb6095b242
commit 3448f0fa239430156d7ebbcab6cf1abb6095b242
Author: Owen Avery <powerboat9.gamer@gmail.com>
Date: Thu Jan 26 22:59:49 2023 -0500
Fix issue with parsing unsafe block expression statements
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.gamer@gmail.com>
Diff:
---
gcc/rust/parse/rust-parse-impl.h | 10 +++++++++-
gcc/testsuite/rust/compile/issue-1422.rs | 7 +++++++
2 files changed, 16 insertions(+), 1 deletion(-)
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!();
+}
More information about the Gcc-cvs
mailing list