aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Burgess <andrew.burgess@embecosm.com>2020-08-25 10:25:32 +0100
committerAndrew Burgess <andrew.burgess@embecosm.com>2020-08-25 10:25:32 +0100
commit419cca029e5d4b9b648402f9da3c38f302ca7b0a (patch)
tree43b4857a5707aa1db9293a335b94c1d81df91995
parent07758bdfa9e5a762f2ec0deeb51b11d6ad5fe376 (diff)
downloadbinutils-419cca029e5d4b9b648402f9da3c38f302ca7b0a.zip
binutils-419cca029e5d4b9b648402f9da3c38f302ca7b0a.tar.gz
binutils-419cca029e5d4b9b648402f9da3c38f302ca7b0a.tar.bz2
Revert "Fix for Bug 26372 [Modula-2] Parsing of multi-subscript arrays"
This reverts commit 07758bdfa9e5a762f2ec0deeb51b11d6ad5fe376.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/m2-exp.y45
-rw-r--r--gdb/testsuite/ChangeLog6
-rw-r--r--gdb/testsuite/gdb.modula2/multidim.c39
-rw-r--r--gdb/testsuite/gdb.modula2/multidim.exp34
5 files changed, 25 insertions, 105 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 1cb2d6f..642cb64 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,9 +1,3 @@
-2020-08-25 Gaius Mulley <gaiusmod2@gmail.com>
-
- PR m2/26372
- * m2-exp.y: Rewrite array subscript rules to support multidimension
- array access. (ArgumentList) replaces non_empty_arglist.
-
2020-08-24 Simon Marchi <simon.marchi@polymtl.ca>
* value.h (valprint_check_validity): Move declaration from
diff --git a/gdb/m2-exp.y b/gdb/m2-exp.y
index dba331f..70a3d9c 100644
--- a/gdb/m2-exp.y
+++ b/gdb/m2-exp.y
@@ -293,18 +293,21 @@ set : '{' arglist '}'
;
-/* Modula-2 array subscript notation [a,b,c...]. */
-exp : exp '[' ArgumentList ']' %prec DOT
- {
- if (pstate->arglist_len > 1)
- {
- write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT);
- write_exp_elt_longcst (pstate, pstate->arglist_len);
- write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT);
- }
- else
- write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT);
- }
+/* Modula-2 array subscript notation [a,b,c...] */
+exp : exp '['
+ /* This function just saves the number of arguments
+ that follow in the list. It is *not* specific to
+ function types */
+ { pstate->start_arglist(); }
+ non_empty_arglist ']' %prec DOT
+ { write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT);
+ write_exp_elt_longcst (pstate,
+ pstate->end_arglist());
+ write_exp_elt_opcode (pstate, MULTI_SUBSCRIPT); }
+ ;
+
+exp : exp '[' exp ']'
+ { write_exp_elt_opcode (pstate, BINOP_SUBSCRIPT); }
;
exp : exp '('
@@ -318,22 +321,24 @@ exp : exp '('
write_exp_elt_opcode (pstate, OP_FUNCALL); }
;
-/* Non empty argument list. */
-ArgumentList:
- exp
+arglist :
+ ;
+
+arglist : exp
{ pstate->arglist_len = 1; }
-| ArgumentList ',' exp
- { pstate->arglist_len++; }
;
-arglist :
+arglist : arglist ',' exp %prec ABOVE_COMMA
+ { pstate->arglist_len++; }
;
-arglist : exp
+non_empty_arglist
+ : exp
{ pstate->arglist_len = 1; }
;
-arglist : arglist ',' exp %prec ABOVE_COMMA
+non_empty_arglist
+ : non_empty_arglist ',' exp %prec ABOVE_COMMA
{ pstate->arglist_len++; }
;
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index aebe15d..b976a54 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,9 +1,3 @@
-2020-08-25 Gaius Mulley <gaiusmod2@gmail.com>
-
- PR m2/26372
- * testsuite/gdb.modula2/multidim.exp: New file.
- * testsuite/gdb.modula2/multidim.c: New file.
-
2020-08-24 Simon Marchi <simon.marchi@polymtl.ca>
* lib/gdb.exp (runto): Always emit fail on internal error.
diff --git a/gdb/testsuite/gdb.modula2/multidim.c b/gdb/testsuite/gdb.modula2/multidim.c
deleted file mode 100644
index b0ce848..0000000
--- a/gdb/testsuite/gdb.modula2/multidim.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* This test script is part of GDB, the GNU debugger.
-
- Copyright 2020 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>. */
-
-
-static int a[10][20];
-
-static void
-here (void)
-{
-}
-
-int
-main ()
-{
- int i, j;
- int count = 0;
-
- for (i = 0; i < 10; i++)
- for (j = 0; j < 20; j++)
- {
- a[i][j] = count;
- count += 1;
- }
- here ();
-}
diff --git a/gdb/testsuite/gdb.modula2/multidim.exp b/gdb/testsuite/gdb.modula2/multidim.exp
deleted file mode 100644
index df70548..0000000
--- a/gdb/testsuite/gdb.modula2/multidim.exp
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright 2020 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# This file is part of the gdb testsuite. It contains tests for printing
-# the elements of an unbounded array using the Modula-2 language mode of
-# gdb.
-
-standard_testfile multidim.c
-
-if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug quiet}]} {
- return -1
-}
-
-if ![runto here] then {
- perror "couldn't run to breakpoint foo"
- continue
-}
-
-gdb_test "set lang modula-2" ".*does not match.*" "switch to modula-2"
-
-gdb_test "print a\[1,2\]" ".*= 22.*" "second row third column"
-gdb_test "print a\[2,1\]" ".*= 41.*" "fifth row second column"