aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArthur Cohen <arthur.cohen@embecosm.com>2023-02-02 15:32:17 +0100
committerArthur Cohen <arthur.cohen@embecosm.com>2023-04-06 10:47:19 +0200
commit7f5144d1c9638eee4499c45d6ee625ff670cbe69 (patch)
tree803d75c904dd6551f4a31e375a95c1f8505beae7
parent2af66ebd1d83f8b0706805fd650f18bd8c8effe7 (diff)
downloadgcc-7f5144d1c9638eee4499c45d6ee625ff670cbe69.zip
gcc-7f5144d1c9638eee4499c45d6ee625ff670cbe69.tar.gz
gcc-7f5144d1c9638eee4499c45d6ee625ff670cbe69.tar.bz2
gccrs: parser: Fix parsing of closure param list
gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser::parse_closure_expr): Advance tokens properly when parsing closure param list. gcc/testsuite/ChangeLog: * rust/compile/closure_move_expr.rs: New test.
-rw-r--r--gcc/rust/parse/rust-parse-impl.h2
-rw-r--r--gcc/testsuite/rust/compile/closure_move_expr.rs9
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h
index 3610790..4ceb978 100644
--- a/gcc/rust/parse/rust-parse-impl.h
+++ b/gcc/rust/parse/rust-parse-impl.h
@@ -7592,6 +7592,7 @@ Parser<ManagedTokenSource>::parse_closure_expr (AST::AttrVec outer_attrs)
case PIPE:
// actually may have parameters
lexer.skip_token ();
+ t = lexer.peek_token ();
while (t->get_id () != PIPE)
{
@@ -7608,6 +7609,7 @@ Parser<ManagedTokenSource>::parse_closure_expr (AST::AttrVec outer_attrs)
if (lexer.peek_token ()->get_id () != COMMA)
{
+ lexer.skip_token ();
// not an error but means param list is done
break;
}
diff --git a/gcc/testsuite/rust/compile/closure_move_expr.rs b/gcc/testsuite/rust/compile/closure_move_expr.rs
new file mode 100644
index 0000000..780c316
--- /dev/null
+++ b/gcc/testsuite/rust/compile/closure_move_expr.rs
@@ -0,0 +1,9 @@
+// { dg-additional-options "-fsyntax-only" }
+
+fn foo() {
+ move |l: u32, r: u32| l + r
+}
+
+fn foo2() {
+ |l: u32, r: u32| l + r
+}