From 15a491af3cdc4d7487e848bd9648a15ac3a2d28f Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Mon, 23 Nov 2020 17:26:00 -0500 Subject: [PATCH] gdb/testsuite: show evaluation errors in gdb_assert Let's say you put this gdb_assert in a test: gdb_assert "some invalid tcl code" You just get: FAIL: gdb.base/template.exp: some invalid tcl code That's not very easy to debug, since you don't know what's invalid in your code. Change gdb_assert to print the error message when catch's return code is 1 (TCL_ERROR). The "warning" is shown both on stdout and in the log file. Mark the test as unresolved, because the evaluation error means we couldn't reach a valid pass/fail conclusion. gdb/testsuite/ChangeLog: * lib/gdb.exp (gdb_assert): Show error message on error. Change-Id: Ie6477859554e909ed8d07fb2769c6f2f55e7cce6 --- gdb/testsuite/ChangeLog | 4 ++++ gdb/testsuite/lib/gdb.exp | 9 ++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index da7823fddf2..d6358dd8856 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2020-11-23 Simon Marchi + + * lib/gdb.exp (gdb_assert): Show error message on error. + 2020-11-23 Tom de Vries * gdb.ada/enum_idx_packed.exp: Limit setup_kfail to gnat 9 and 10. diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index c42933b3f41..f2954fd5192 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -1728,7 +1728,14 @@ proc gdb_assert { condition {message ""} } { } set code [catch {uplevel 1 expr $condition} res] - if {$code != 0 || !$res} { + if {$code == 1} { + # If code is 1 (TCL_ERROR), it means evaluation failed and res contains + # an error message. Print the error message, and set res to 0 since we + # want to return a boolean. + warning "While evaluating expression in gdb_assert: $res" + unresolved $message + set res 0 + } elseif { !$res } { fail $message } else { pass $message -- 2.30.2