]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
gccrs: Fix issue with parsing unsafe block expression statements
authorOwen Avery <powerboat9.gamer@gmail.com>
Fri, 27 Jan 2023 03:59:49 +0000 (22:59 -0500)
committerArthur Cohen <arthur.cohen@embecosm.com>
Thu, 6 Apr 2023 08:47:24 +0000 (10:47 +0200)
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
gcc/testsuite/rust/compile/issue-1422.rs [new file with mode: 0644]

index 1e5b2dc85ede76adf961c7fa69378d4458cdabc9..db32803ddbea3f3e8120ddd3c542e0d68e133414 100644 (file)
@@ -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 (file)
index 0000000..b178cda
--- /dev/null
@@ -0,0 +1,7 @@
+macro_rules! test {
+    () => { unsafe {} };
+}
+
+fn main() {
+    test!();
+}