On 23/08/16 12:05 +0100, Pedro Alves wrote:
On 08/23/2016 10:54 AM, Jonathan Wakely wrote:
That's being set by prettyprinters.exp and xmethods.exp (so it's GDB's
fault! ;-)
:-)
This seems to work. I'll do some more testing and commit later today.
LGTM.
Though IME, save/restoring globals in a constant source of trouble,
for occasionally someone adds an early return that inadvertently
skips the restore. Of course in gdb every test must be written
using custom .exp code, so we're more prone to being bitten. Still...
The way we solve that on gdb systematically is with convenience
wrappers that handle the save/restore. E.g. see:
$ grep "proc with_" *
gdb.exp:proc with_test_prefix { prefix body } {
gdb.exp:proc with_gdb_prompt { prompt body } {
gdb.exp:proc with_target_charset { target_charset body } {
gdb.exp:proc with_spawn_id { spawn_id body } {
gdb.exp:proc with_timeout_factor { factor body } {
In this particular case, I'd add a wrapper method to
libstdc++-v3/testsuite/lib/gdb-test.exp, such as:
# Like dg-runtest but keep the .exe around. dg-test has an option for
# this but there is no way to pass it through dg-runtest.
proc gdb-dg-runtest {args} {
global dg-interpreter-batch-mode
set saved-dg-interpreter-batch-mode ${dg-interpreter-batch-mode}
set dg-interpreter-batch-mode 1
eval dg-runtest $args
set dg-interpreter-batch-mode ${saved-dg-interpreter-batch-mode}
}
And then use gdb-dg-runtest instead of dg-runtest in
prettyprinters.exp and xmethods.exp.
That works nicely.
(Maybe put even move more of the duplicate code around the
current dg-runtest calls to the wrapper, and then give the
wrapper named arguments.)
That didn't seem to make things simpler.
This is what I plan to commit.
commit a487dae3a870d0c238bef06937d63d0136a13465
Author: Jonathan Wakely <jwak...@redhat.com>
Date: Tue Aug 23 09:09:18 2016 +0100
Restore dg-interpreter-batch-mode for libstdc++ tests
2016-08-24 Jonathan Wakely <jwak...@redhat.com>
Pedro Alves <pal...@redhat.com>
* testsuite/lib/gdb-test.exp (gdb-dg-runtest): Define wrapper to save
and restore dg-interpreter-batch-mode.
* testsuite/libstdc++-prettyprinters/prettyprinters.exp: Use
gdb-dg-runtest instead of dg-runtest.
* testsuite/libstdc++-xmethods/xmethods.exp: Likewise.
diff --git a/libstdc++-v3/testsuite/lib/gdb-test.exp b/libstdc++-v3/testsuite/lib/gdb-test.exp
index 5570009..a029883 100644
--- a/libstdc++-v3/testsuite/lib/gdb-test.exp
+++ b/libstdc++-v3/testsuite/lib/gdb-test.exp
@@ -277,3 +277,15 @@ proc gdb_version_check_xmethods {} {
"python import gdb.xmethod; print(gdb.xmethod.XMethod)" \
"<class 'gdb\\.xmethod\\.XMethod'>"]
}
+
+# Like dg-runtest but keep the .exe around. dg-test has an option for
+# this but there is no way to pass it through dg-runtest.
+proc gdb-dg-runtest {args} {
+ global dg-interpreter-batch-mode
+ set saved-dg-interpreter-batch-mode ${dg-interpreter-batch-mode}
+ set dg-interpreter-batch-mode 1
+
+ eval dg-runtest $args
+
+ set dg-interpreter-batch-mode ${saved-dg-interpreter-batch-mode}
+}
diff --git a/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp b/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp
index 0c62b5e..cc003cd 100644
--- a/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp
+++ b/libstdc++-v3/testsuite/libstdc++-prettyprinters/prettyprinters.exp
@@ -41,14 +41,9 @@ if {! [gdb_version_check]} {
return
}
-# This can be used to keep the .exe around. dg-test has an option for
-# this but there is no way to pass it through dg-runtest.
-global dg-interpreter-batch-mode
-set dg-interpreter-batch-mode 1
-
global DEFAULT_CXXFLAGS
global PCH_CXXFLAGS
-dg-runtest [lsort [glob $srcdir/$subdir/*.cc]] \
+gdb-dg-runtest [lsort [glob $srcdir/$subdir/*.cc]] \
"" "$DEFAULT_CXXFLAGS $PCH_CXXFLAGS"
if [info exists guality_gdb_name] {
diff --git a/libstdc++-v3/testsuite/libstdc++-xmethods/xmethods.exp b/libstdc++-v3/testsuite/libstdc++-xmethods/xmethods.exp
index ee9b31a..e580d73 100644
--- a/libstdc++-v3/testsuite/libstdc++-xmethods/xmethods.exp
+++ b/libstdc++-v3/testsuite/libstdc++-xmethods/xmethods.exp
@@ -42,14 +42,9 @@ if {! [gdb_version_check_xmethods]} {
return
}
-# This can be used to keep the .exe around. dg-test has an option for
-# this but there is no way to pass it through dg-runtest.
-global dg-interpreter-batch-mode
-set dg-interpreter-batch-mode 1
-
global DEFAULT_CXXFLAGS
global PCH_CXXFLAGS
-dg-runtest [lsort [glob $srcdir/$subdir/*.cc]] \
+gdb-dg-runtest [lsort [glob $srcdir/$subdir/*.cc]] \
"" "$DEFAULT_CXXFLAGS $PCH_CXXFLAGS"
if [info exists guality_gdb_name] {