Browse Source
Fix bug PR m2/26372, GDB's inability to parse multi-dimensional
modula-2 arrays.
We previously had two rules for handling the parsing of array
sub-scripts. I have reproduced them here with the actual handler
blocks removed to make the bug clearer:
exp : exp '[' non_empty_arglist ']'
;
exp : exp '[' exp ']'
;
non_empty_arglist
: exp
;
non_empty_arglist
: non_empty_arglist ',' exp
;
This is ambiguous as the pattern "exp '[' exp" could match either of
the 'exp' rules. Currently it just so happens that the parser picks
the second 'exp' rule which means we can only handle a single array
index.
As the handler code for the first 'exp' pattern will correctly handle
and number of array indexes then lets just remove the second pattern.
gdb/ChangeLog:
PR m2/26372
* m2-exp.y (exp): Improve comment for non_empty_arglist case, add
an assert. Remove single element array indexing pattern as the
MULTI_SUBSCRIPT support will handle this case too.
gdb/testsuite/ChangeLog:
PR m2/26372
* gdb.modula2/multidim.c: New file.
* gdb.modula2/multidim.exp: New file.
gdb-10-branch
committed by
Andrew Burgess
5 changed files with 96 additions and 7 deletions
@ -0,0 +1,39 @@ |
|||
/* 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 (); |
|||
} |
|||
@ -0,0 +1,37 @@ |
|||
# 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 'here'" |
|||
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" |
|||
gdb_test "print a\[a\[0,1\],a\[0,2\]\]" ".*= 22.*" \ |
|||
"second row third column again" |
|||
Loading…
Reference in new issue