[committed,88/88] gccrs: Fix issue with parsing unsafe block expression statements

Message ID 20230405140411.3016563-89-arthur.cohen@embecosm.com
State Accepted
Headers
Series [committed,01/88] gccrs: fatal_error_flag: Fix typo in error message |

Checks

Context Check Description
snail/gcc-patch-check success Github commit url

Commit Message

Arthur Cohen April 5, 2023, 2:04 p.m. UTC
  From: Owen Avery <powerboat9.gamer@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.gamer@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
  

Patch

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!();
+}