From ce38f5edf1de7edefa983fd0d71a25ea8d2140b8 Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Mon, 11 Jan 2021 15:40:18 +0000 Subject: 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/testsuite/gdb.fortran/debug-expr.exp | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'gdb/testsuite/gdb.fortran/debug-expr.exp') diff --git a/gdb/testsuite/gdb.fortran/debug-expr.exp b/gdb/testsuite/gdb.fortran/debug-expr.exp index 4111d8d..fd63ea7 100644 --- a/gdb/testsuite/gdb.fortran/debug-expr.exp +++ b/gdb/testsuite/gdb.fortran/debug-expr.exp @@ -41,3 +41,11 @@ gdb_continue_to_breakpoint "Break Here" gdb_test_no_output "set debug expression 1" gdb_test_debug_expr "print obj%three(1)%two(1)%one(1)%i" "\\\$$decimal = 1" +gdb_test_debug_expr "print .TRUE." [multi_line \ + "" \ + "\\s+0\\s+OP_BOOL\\s+TRUE" \ + "\\\$$decimal = \.TRUE\."] +gdb_test_debug_expr "print .FALSE." [multi_line \ + "" \ + "\\s+0\\s+OP_BOOL\\s+FALSE" \ + "\\\$$decimal = \.FALSE\."] -- cgit v1.1