gdb/modula-2: parsing of multi-subscript arrays
authorGaius Mulley <gaiusmod2@gmail.com>
Tue, 25 Aug 2020 08:39:27 +0000 (09:39 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 25 Aug 2020 09:28:06 +0000 (10:28 +0100)
commit3945d2d77e373c828ebbbb05b3ba06adf39019ab
tree99bf6cac80354c51f7d533e4cfb972b6a7a39692
parent419cca029e5d4b9b648402f9da3c38f302ca7b0a
gdb/modula-2: parsing of multi-subscript arrays

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/ChangeLog
gdb/m2-exp.y
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.modula2/multidim.c [new file with mode: 0644]
gdb/testsuite/gdb.modula2/multidim.exp [new file with mode: 0644]