aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Avery <powerboat9.gamer@gmail.com>2023-03-27 11:05:03 -0400
committerPhilip Herron <philip.herron@embecosm.com>2023-03-29 21:17:35 +0000
commit0ddec9f44d6ce81eec7aa62c2d9b13c9094e7857 (patch)
tree38b85d9089743cad74ed0089b7d946b6925f2299
parent87a0a8f84f56002b5c6f3c08dcce831ba7759eed (diff)
downloadgcc-0ddec9f44d6ce81eec7aa62c2d9b13c9094e7857.zip
gcc-0ddec9f44d6ce81eec7aa62c2d9b13c9094e7857.tar.gz
gcc-0ddec9f44d6ce81eec7aa62c2d9b13c9094e7857.tar.bz2
Fix parsing of array expressions.
Array expressions were being eagerly handled outside of Pratt parsing. gcc/rust/ChangeLog: * parse/rust-parse-impl.h (Parser<ManagedTokenSource>::parse_expr_without_block): Remove direct array expression handling. gcc/testsuite/ChangeLog: * rust/compile/array4.rs: New test. * rust/execute/torture/arrays.rs: New test. Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
-rw-r--r--gcc/rust/parse/rust-parse-impl.h3
-rw-r--r--gcc/testsuite/rust/compile/array4.rs3
-rw-r--r--gcc/testsuite/rust/execute/torture/arrays.rs3
3 files changed, 6 insertions, 3 deletions
diff --git a/gcc/rust/parse/rust-parse-impl.h b/gcc/rust/parse/rust-parse-impl.h
index 79dd4e2..7c554e8 100644
--- a/gcc/rust/parse/rust-parse-impl.h
+++ b/gcc/rust/parse/rust-parse-impl.h
@@ -7449,9 +7449,6 @@ Parser<ManagedTokenSource>::parse_expr_without_block (
case MOVE:
// closure expr (though not all closure exprs require this)
return parse_closure_expr (std::move (outer_attrs));
- case LEFT_SQUARE:
- // array expr (creation, not index)
- return parse_array_expr (std::move (outer_attrs));
default: {
/* HACK: piggyback on pratt parsed expr and abuse polymorphism to
* essentially downcast */
diff --git a/gcc/testsuite/rust/compile/array4.rs b/gcc/testsuite/rust/compile/array4.rs
new file mode 100644
index 0000000..c70ca0a
--- /dev/null
+++ b/gcc/testsuite/rust/compile/array4.rs
@@ -0,0 +1,3 @@
+pub fn foo() {
+ [0, 1, 2][1];
+}
diff --git a/gcc/testsuite/rust/execute/torture/arrays.rs b/gcc/testsuite/rust/execute/torture/arrays.rs
new file mode 100644
index 0000000..e30285f
--- /dev/null
+++ b/gcc/testsuite/rust/execute/torture/arrays.rs
@@ -0,0 +1,3 @@
+fn main() -> i32 {
+ [55, 66, 77][1] - 66
+}