gdb: fix debug dump of OP_BOOL expressions
authorAndrew Burgess <andrew.burgess@embecosm.com>
Mon, 11 Jan 2021 15:40:18 +0000 (15:40 +0000)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Tue, 12 Jan 2021 09:44:08 +0000 (09:44 +0000)
commitce38f5edf1de7edefa983fd0d71a25ea8d2140b8
treeb8800fd6933cf89ac24948241b584a1aac23c144
parent7c654b719d2c186bd645a560525dd3e9c86d15cd
gdb: fix debug dump of OP_BOOL expressions

Consider this GDB session:

  (gdb) set language fortran
  (gdb) set debug expression 1
  (gdb) p .TRUE.
  Dump of expression @ 0x4055d90, before conversion to prefix form:
   Language fortran, 3 elements, 16 bytes each.
   Index                Opcode         Hex Value  String Value
       0               OP_BOOL  79  O...............
       1             BINOP_ADD  1  ................
       2               OP_BOOL  79  O...............
  Dump of expression @ 0x4055d90, after conversion to prefix form:
  Expression: `TRUE'
   Language fortran, 3 elements, 16 bytes each.

       0  OP_BOOL               Unknown format
       1  BINOP_ADD
       2    OP_BOOL               Unknown format
       3    OP_NULL               Unknown format
  $1 = .TRUE.

The final dump of the OP_BOOL is completely wrong.  After this patch
we now get:

  (gdb) set language fortran
  (gdb) set debug expression 1
  (gdb) p .TRUE.
  Dump of expression @ 0x2d07470, before conversion to prefix form:
   Language fortran, 3 elements, 16 bytes each.
   Index                Opcode         Hex Value  String Value
       0               OP_BOOL  79  O...............
       1             BINOP_ADD  1  ................
       2               OP_BOOL  79  O...............
  Dump of expression @ 0x2d07470, after conversion to prefix form:
  Expression: `TRUE'
   Language fortran, 3 elements, 16 bytes each.

       0  OP_BOOL               TRUE
  $1 = .TRUE.

Much better.  I added a test for this into the Fortran testsuite.

gdb/ChangeLog:

* expprint.c (dump_subexp_body_standard): Handle OP_BOOL.

gdb/testsuite/ChangeLog:

* gdb.fortran/debug-expr.exp: Add new tests.
gdb/ChangeLog
gdb/expprint.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.fortran/debug-expr.exp