From fdae5c22cedfb5948f2ccfbafc57ab53587129d5 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Tue, 8 Jun 2021 17:39:05 +0200 Subject: [PATCH] [gdb/testsuite] Disallow single argument in multi_line It's a common mistake of mine to do: ... set l [list "foo" "bar"] set re [multi_line $l] ... and to get "foo bar" while I was expecting "foo\r\nbar", which I get after doing instead: ... set re [multi_line {*}$l] ... Detect this type of mistake by erroring out in multi_line when only one argument is passed. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2021-06-08 Tom de Vries * lib/gdb.exp (multi_line): Require more than one argument. * gdb.base/gdbinit-history.exp: Update multi_line call. * gdb.base/jit-reader.exp: Remove multi_line call. * gdb.fortran/dynamic-ptype-whatis.exp: Same. --- gdb/testsuite/ChangeLog | 7 +++++++ gdb/testsuite/gdb.base/gdbinit-history.exp | 6 +++++- gdb/testsuite/gdb.base/jit-reader.exp | 4 +--- gdb/testsuite/gdb.fortran/dynamic-ptype-whatis.exp | 2 +- gdb/testsuite/lib/gdb.exp | 4 ++++ 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index e2f1486af34..51abd0e0cff 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2021-06-08 Tom de Vries + + * lib/gdb.exp (multi_line): Require more than one argument. + * gdb.base/gdbinit-history.exp: Update multi_line call. + * gdb.base/jit-reader.exp: Remove multi_line call. + * gdb.fortran/dynamic-ptype-whatis.exp: Same. + 2021-06-08 Tom de Vries * gdb.base/info-types.exp.tcl (match_line, gdb_test_lines): Move ... diff --git a/gdb/testsuite/gdb.base/gdbinit-history.exp b/gdb/testsuite/gdb.base/gdbinit-history.exp index 8e3994e6052..36f4a114a71 100644 --- a/gdb/testsuite/gdb.base/gdbinit-history.exp +++ b/gdb/testsuite/gdb.base/gdbinit-history.exp @@ -144,7 +144,11 @@ proc check_history { hist } { lappend hist_lines " $idx $h" incr idx } - set pattern [eval multi_line $hist_lines] + if { [llength $hist_lines] == 1 } { + set pattern [lindex $hist_lines 0] + } else { + set pattern [eval multi_line $hist_lines] + } # Check the history. gdb_test "show commands" "$pattern.*" diff --git a/gdb/testsuite/gdb.base/jit-reader.exp b/gdb/testsuite/gdb.base/jit-reader.exp index 25d1100ca60..83e403653d6 100644 --- a/gdb/testsuite/gdb.base/jit-reader.exp +++ b/gdb/testsuite/gdb.base/jit-reader.exp @@ -240,9 +240,7 @@ proc jit_reader_test {} { # the built-in unwinder cannot backtrace through the mangled # stack pointer. gdb_test "bt" \ - [multi_line \ - "Backtrace stopped: Cannot access memory at address $sp_after_mangling" \ - ] \ + "Backtrace stopped: Cannot access memory at address $sp_after_mangling" \ "bt shows error" gdb_test "info frame" "Cannot access memory at address.*" \ diff --git a/gdb/testsuite/gdb.fortran/dynamic-ptype-whatis.exp b/gdb/testsuite/gdb.fortran/dynamic-ptype-whatis.exp index d2ffd6d73f7..5ea2aa48a05 100644 --- a/gdb/testsuite/gdb.fortran/dynamic-ptype-whatis.exp +++ b/gdb/testsuite/gdb.fortran/dynamic-ptype-whatis.exp @@ -73,7 +73,7 @@ gdb_test "whatis var4%t2_array" "type = Type type1, allocatable \\(3\\)" gdb_test "whatis var5%t3_array" "type = Type type1 \\(3\\)" gdb_test "whatis var6%t4_array" "type = Type type2, allocatable \\(3\\)" gdb_test "whatis var7%t5_array" "type = Type type2 \\(4\\)" -gdb_test "ptype var3%t1_i" [ multi_line "type = integer\\(kind=4\\)" ] +gdb_test "ptype var3%t1_i" "type = integer\\(kind=4\\)" gdb_test "ptype var4%t2_array" [ multi_line "type = Type type1" \ " integer\\(kind=4\\) :: spacer" \ " integer\\(kind=4\\) :: t1_i" \ diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index f7ab2198a25..8469ec9801c 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -7294,6 +7294,10 @@ proc capture_command_output { command prefix } { # being. proc multi_line { args } { + if { [llength $args] == 1 } { + set hint "forgot {*} before list argument?" + error "multi_line called with one argument ($hint)" + } return [join $args "\r\n"] } -- 2.30.2