From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 31622 invoked by alias); 2 Feb 2017 01:33:21 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 31612 invoked by uid 89); 2 Feb 2017 01:33:21 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.2 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_SOFTFAIL,URIBL_RED autolearn=no version=3.3.2 spammy=H*i:sk:1485980, H*f:sk:1485980 X-HELO: simark.ca Received: from simark.ca (HELO simark.ca) (158.69.221.121) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 02 Feb 2017 01:33:10 +0000 Received: by simark.ca (Postfix, from userid 33) id 3877D1E7F5; Wed, 1 Feb 2017 20:33:09 -0500 (EST) To: Luis Machado Subject: Re: [PATCH,v2] Make language setting tests more robust X-PHP-Originating-Script: 33:rcube.php MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Date: Thu, 02 Feb 2017 01:33:00 -0000 From: Simon Marchi Cc: gdb-patches@sourceware.org In-Reply-To: <1485980466-711-1-git-send-email-lgustavo@codesourcery.com> References: <1485962220-31071-1-git-send-email-lgustavo@codesourcery.com> <1485980466-711-1-git-send-email-lgustavo@codesourcery.com> Message-ID: <8bc8838d140e2d228ea397029070af42@polymtl.ca> X-Sender: simon.marchi@polymtl.ca User-Agent: Roundcube Webmail/1.2.3 X-IsSubscribed: yes X-SW-Source: 2017-02/txt/msg00063.txt.bz2 On 2017-02-01 15:21, Luis Machado wrote: > New in v2: > > - Remove gdb.objc/objc.exp, since it was empty after the removal of > set_lang_objc. > - Deleted stale comments from .exp files. > - set_language now has a couple of fixed arguments (language and > message) and > is simplified. > > This patch robustifies the setting of the language in gdb. Right now > most of > the tests assume "set language" is a silent command and use > gdb_test_no_output > for testing, but it may output a warning stating the language the user > wants > to select does not match the frame's language. When this happens we > have a > failure. This is also the case with "show language", where it outputs > the > language currently-selected but may also output said warning. > > One case of the warning being displayed happens when one has debug > information > for glibc, which may cause GDB to identify the frame as having an "asm" > language. Therefore setting it to something else will get GDB's > attention. > > This patch addresses the problem by creating a function in lib/gdb.exp > to > set the language. That function will also handle potential warnings and > check > to make sure the language was properly selected. > > Also, i noticed most of the languages have their own > set_lang_ proc, > and they are all the same. Therefore i've removed those and switched > to using > only the new set_language proc. > > I tried to confirm why set_lang_ was replicated, but my > conclusion > was that it was just the way the code worked and people just > copy/pasted from > an existing language .exp file. > > Overall i see no regressions with Ubuntu 16.04 x86-64, though the > number of > tests changed slightly due to the way set_language works. No > additional > failures nonetheless. > > 2017-02-01 Luis Machado > > * gdb.arch/i386-stap-eval-lang-ada.exp: Use new set_language proc. > * gdb.base/callfuncs.exp: Likewise. > * gdb.compile/compile-ifunc.exp: Likewise. > * gdb.cp/classes.exp: Likewise. > * gdb.cp/cmpd-minsyms.exp: Likewise. > * gdb.cp/cplusfuncs.exp: Likewise. > * gdb.cp/debug-expr.exp: Likewise. > * gdb.cp/demangle.exp: Likewise. > * gdb.cp/expand-psymtabs-cxx.exp: Likewise. > * gdb.cp/inherit.exp: Likewise. > * gdb.cp/overload-const.exp: Likewise. > * gdb.cp/psymtab-parameter.exp: Likewise. > * gdb.cp/ptype-flags.exp: Likewise. > * gdb.cp/typedef-operator.exp: Likewise. > * gdb.cp/var-tag.exp: Likewise. > * gdb.cp/virtfunc.exp: Likewise. > * gdb.dlang/circular.exp: Likewise. > * gdb.dlang/debug-expr.exp: Likewise. > * gdb.dlang/demangle.exp: Likewise. > * gdb.dlang/expression.exp: Likewise. > * gdb.dlang/primitive-types.exp: Likewise. > * gdb.dlang/properties.exp: Likewise. > * gdb.dwarf2/arr-stride.exp: Likewise. > * gdb.dwarf2/arr-subrange.exp: Likewise. > * gdb.dwarf2/data-loc.exp: Likewise. > * gdb.dwarf2/dw2-cp-infcall-ref-static.exp: Likewise. > * gdb.dwarf2/dw2-linkage-name-trust.exp: Likewise. > * gdb.dwarf2/dynarr-ptr.exp: Likewise. > * gdb.dwarf2/subrange.exp: Likewise. > * gdb.fortran/exprs.exp: Likewise. > * gdb.fortran/types.exp: Likewise. > * gdb.go/basic-types.exp: Likewise. > * gdb.go/print.exp: Likewise. > * gdb.objc/print.exp: Likewise. > * gdb.opencl/datatypes.exp: Likewise. > * gdb.pascal/print.exp: Likewise. > * gdb.pascal/types.exp: Likewise. > * gdb.python/py-lookup-type.exp: Likewise. > * gdb.rust/expr.exp: Likewise. > * lib/d-support.exp (set_lang_d): Remove. > * lib/fortran.exp (set_lang_fortran): Remove. > * lib/gdb.exp (set_language): New proc. > * lib/go.exp (set_lang_go): Remove. > * lib/objc.exp: Remove file. > * lib/pascal.exp (set_lang_pascal): Remove. > * lib/rust-support.exp (set_lang_rust): Remove. > --- > gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp | 2 +- > gdb/testsuite/gdb.base/callfuncs.exp | 2 +- > gdb/testsuite/gdb.compile/compile-ifunc.exp | 2 +- > gdb/testsuite/gdb.cp/classes.exp | 2 +- > gdb/testsuite/gdb.cp/cmpd-minsyms.exp | 2 +- > gdb/testsuite/gdb.cp/cplusfuncs.exp | 2 +- > gdb/testsuite/gdb.cp/debug-expr.exp | 2 +- > gdb/testsuite/gdb.cp/demangle.exp | 4 +- > gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp | 2 +- > gdb/testsuite/gdb.cp/inherit.exp | 2 +- > gdb/testsuite/gdb.cp/overload-const.exp | 2 +- > gdb/testsuite/gdb.cp/psymtab-parameter.exp | 2 +- > gdb/testsuite/gdb.cp/ptype-flags.exp | 2 +- > gdb/testsuite/gdb.cp/typedef-operator.exp | 2 +- > gdb/testsuite/gdb.cp/var-tag.exp | 4 +- > gdb/testsuite/gdb.cp/virtfunc.exp | 2 +- > gdb/testsuite/gdb.dlang/circular.exp | 2 +- > gdb/testsuite/gdb.dlang/debug-expr.exp | 2 +- > gdb/testsuite/gdb.dlang/demangle.exp | 2 +- > gdb/testsuite/gdb.dlang/expression.exp | 2 +- > gdb/testsuite/gdb.dlang/primitive-types.exp | 2 +- > gdb/testsuite/gdb.dlang/properties.exp | 2 +- > gdb/testsuite/gdb.dwarf2/arr-stride.exp | 2 +- > gdb/testsuite/gdb.dwarf2/arr-subrange.exp | 2 +- > gdb/testsuite/gdb.dwarf2/data-loc.exp | 2 +- > .../gdb.dwarf2/dw2-cp-infcall-ref-static.exp | 2 +- > .../gdb.dwarf2/dw2-linkage-name-trust.exp | 2 +- > gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp | 2 +- > gdb/testsuite/gdb.dwarf2/subrange.exp | 2 +- > gdb/testsuite/gdb.fortran/exprs.exp | 2 +- > gdb/testsuite/gdb.fortran/types.exp | 2 +- > gdb/testsuite/gdb.go/basic-types.exp | 2 +- > gdb/testsuite/gdb.go/print.exp | 2 +- > gdb/testsuite/gdb.objc/print.exp | 4 +- > gdb/testsuite/gdb.opencl/datatypes.exp | 6 +-- > gdb/testsuite/gdb.pascal/print.exp | 2 +- > gdb/testsuite/gdb.pascal/types.exp | 2 +- > gdb/testsuite/gdb.python/py-lookup-type.exp | 2 +- > gdb/testsuite/gdb.rust/expr.exp | 2 +- > gdb/testsuite/lib/d-support.exp | 14 ------- > gdb/testsuite/lib/fortran.exp | 14 ------- > gdb/testsuite/lib/gdb.exp | 43 > ++++++++++++++++++++++ > gdb/testsuite/lib/go.exp | 14 ------- > gdb/testsuite/lib/objc.exp | 30 > --------------- > gdb/testsuite/lib/pascal.exp | 14 ------- > gdb/testsuite/lib/rust-support.exp | 13 ------- > 46 files changed, 86 insertions(+), 144 deletions(-) > delete mode 100644 gdb/testsuite/lib/objc.exp > > diff --git a/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp > b/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp > index 8449ffa..41530ea 100644 > --- a/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp > +++ b/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp > @@ -25,7 +25,7 @@ if { [prepare_for_testing "failed to prepare" > $testfile $srcfile] } { > return -1 > } > > -gdb_test_no_output "set language ada" > +set_language "ada" > > if { ![runto "-pstap bar"] } { > return -1 > diff --git a/gdb/testsuite/gdb.base/callfuncs.exp > b/gdb/testsuite/gdb.base/callfuncs.exp > index 3651963..ae30fae 100644 > --- a/gdb/testsuite/gdb.base/callfuncs.exp > +++ b/gdb/testsuite/gdb.base/callfuncs.exp > @@ -303,7 +303,7 @@ proc rerun_and_prepare {} { > gdb_suppress_tests > } > > - gdb_test_no_output "set language c" > + set_language "c" > > get_debug_format > > diff --git a/gdb/testsuite/gdb.compile/compile-ifunc.exp > b/gdb/testsuite/gdb.compile/compile-ifunc.exp > index dc442ff..fc37720 100644 > --- a/gdb/testsuite/gdb.compile/compile-ifunc.exp > +++ b/gdb/testsuite/gdb.compile/compile-ifunc.exp > @@ -29,7 +29,7 @@ with_test_prefix "nodebug" { > # GDB happened to see real asm code when it stopped at the entry > point > # when talking to a remote target, like gdbserver. This > guarantees the > # feature check below will work. > - gdb_test_no_output "set language c" "" > + set_language "c" > > if {[skip_compile_feature_tests]} { > untested "compile command not supported (could not find libcc1 > shared library?)" > diff --git a/gdb/testsuite/gdb.cp/classes.exp > b/gdb/testsuite/gdb.cp/classes.exp > index 256fa68..ef0e515 100644 > --- a/gdb/testsuite/gdb.cp/classes.exp > +++ b/gdb/testsuite/gdb.cp/classes.exp > @@ -551,7 +551,7 @@ proc do_tests {} { > global nl > > > - gdb_test_no_output "set language c++" "" > + set_language "c++" > gdb_test_no_output "set width 0" "" > > if ![runto_main ] then { > diff --git a/gdb/testsuite/gdb.cp/cmpd-minsyms.exp > b/gdb/testsuite/gdb.cp/cmpd-minsyms.exp > index bff6967..9d5c559 100644 > --- a/gdb/testsuite/gdb.cp/cmpd-minsyms.exp > +++ b/gdb/testsuite/gdb.cp/cmpd-minsyms.exp > @@ -40,7 +40,7 @@ foreach sym $min_syms { > } > > > -gdb_test_no_output "set language c++" > +set_language "c++" > > # A list of minimal symbol names to check. > # Note that GDB::even_harder(char) is quoted and includes > diff --git a/gdb/testsuite/gdb.cp/cplusfuncs.exp > b/gdb/testsuite/gdb.cp/cplusfuncs.exp > index 0b90500..28c5617 100644 > --- a/gdb/testsuite/gdb.cp/cplusfuncs.exp > +++ b/gdb/testsuite/gdb.cp/cplusfuncs.exp > @@ -584,7 +584,7 @@ proc do_tests {} { > > runto_main > > - gdb_test_no_output "set language c++" > + set_language "c++" > probe_demangler > test_paddr_overloaded_functions > test_paddr_operator_functions > diff --git a/gdb/testsuite/gdb.cp/debug-expr.exp > b/gdb/testsuite/gdb.cp/debug-expr.exp > index b20de5b..a941e99 100644 > --- a/gdb/testsuite/gdb.cp/debug-expr.exp > +++ b/gdb/testsuite/gdb.cp/debug-expr.exp > @@ -18,7 +18,7 @@ > if { [skip_cplus_tests] } { continue } > > gdb_start > -gdb_test_no_output "set language c++" > +set_language "c++" > gdb_test_no_output "set debug expression 1" > > # Test whether the expression debug machinery accepts the expression. > diff --git a/gdb/testsuite/gdb.cp/demangle.exp > b/gdb/testsuite/gdb.cp/demangle.exp > index 0ecf95d..c4a9e6e 100644 > --- a/gdb/testsuite/gdb.cp/demangle.exp > +++ b/gdb/testsuite/gdb.cp/demangle.exp > @@ -1547,7 +1547,7 @@ proc do_tests {} { > gdb_exit > gdb_start > > - gdb_test_no_output "set language c++" > + set_language "c++" > gdb_test_no_output "set width 0" > > # Using catch_demangling_errors this way ensures that, if one of > @@ -1559,7 +1559,7 @@ proc do_tests {} { > catch_demangling_errors test_hp_style_demangling > > # Verify specifying demangle language. > - gdb_test_no_output "set language unknown" > + set_language "unknown" > set_demangling_style "auto" > gdb_test_exact "demangle -l c++ -- _ZSt4cout" "std::cout" > gdb_test_exact "demangle -l c++ _ZSt4cout" "std::cout" > diff --git a/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp > b/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp > index ad2111c..112b717 100644 > --- a/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp > +++ b/gdb/testsuite/gdb.cp/expand-psymtabs-cxx.exp > @@ -26,7 +26,7 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" > "${binfile}" object {debug c > > clean_restart ${executable} > > -gdb_test_no_output "set language c++" > +set_language "c++" > > # FAIL was: > # $1 = {} 0 > diff --git a/gdb/testsuite/gdb.cp/inherit.exp > b/gdb/testsuite/gdb.cp/inherit.exp > index d80caee..9caafc8 100644 > --- a/gdb/testsuite/gdb.cp/inherit.exp > +++ b/gdb/testsuite/gdb.cp/inherit.exp > @@ -682,7 +682,7 @@ proc do_tests { } { > return > } > > - gdb_test_no_output "set language c++" > + set_language "c++" > test_ptype_si > test_ptype_mi > test_ptype_vi > diff --git a/gdb/testsuite/gdb.cp/overload-const.exp > b/gdb/testsuite/gdb.cp/overload-const.exp > index 0d7b0ae..feb4e96 100644 > --- a/gdb/testsuite/gdb.cp/overload-const.exp > +++ b/gdb/testsuite/gdb.cp/overload-const.exp > @@ -23,7 +23,7 @@ if {[prepare_for_testing "failed to prepare" > $testfile $testfile.cc {c++ debug}] > return -1 > } > > -gdb_test_no_output "set language c++" > +set_language "c++" > > if [gdb_breakpoint "myclass::func"] { > pass "setting breakpoint at myclass::func" > diff --git a/gdb/testsuite/gdb.cp/psymtab-parameter.exp > b/gdb/testsuite/gdb.cp/psymtab-parameter.exp > index 3d78de9..0bddd80 100644 > --- a/gdb/testsuite/gdb.cp/psymtab-parameter.exp > +++ b/gdb/testsuite/gdb.cp/psymtab-parameter.exp > @@ -25,7 +25,7 @@ if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" > "${binfile}.x" object {debug > clean_restart $testfile.x > > # As `main' is not present GDB fails to find the proper inferior > language. > -gdb_test_no_output "set language c++" > +set_language "c++" > > # The goal is to keep the CU (Compilation Unit) unexpanded. It would > be rather > # XFAIL than FAIL here. For example -readnow breaks it. > diff --git a/gdb/testsuite/gdb.cp/ptype-flags.exp > b/gdb/testsuite/gdb.cp/ptype-flags.exp > index 24c4e31..e82f7d0 100644 > --- a/gdb/testsuite/gdb.cp/ptype-flags.exp > +++ b/gdb/testsuite/gdb.cp/ptype-flags.exp > @@ -30,7 +30,7 @@ if ![runto_main] then { > return > } > > -gdb_test_no_output "set language c++" "" > +set_language "c++" > gdb_test_no_output "set width 0" "" > > proc do_check {name {flags ""} {show_typedefs 1} {show_methods 1} {raw > 0}} { > diff --git a/gdb/testsuite/gdb.cp/typedef-operator.exp > b/gdb/testsuite/gdb.cp/typedef-operator.exp > index 5c5fda6..5180aac 100644 > --- a/gdb/testsuite/gdb.cp/typedef-operator.exp > +++ b/gdb/testsuite/gdb.cp/typedef-operator.exp > @@ -23,7 +23,7 @@ if {[prepare_for_testing "failed to prepare" > $testfile $srcfile {c++ debug}]} { > return -1 > } > > -gdb_test_no_output "set language c++" > +set_language "c++" > > gdb_test "p *u" {You can't do that without a process to debug.} "test > crash" > > diff --git a/gdb/testsuite/gdb.cp/var-tag.exp > b/gdb/testsuite/gdb.cp/var-tag.exp > index 5524468..b85055b 100644 > --- a/gdb/testsuite/gdb.cp/var-tag.exp > +++ b/gdb/testsuite/gdb.cp/var-tag.exp > @@ -37,7 +37,7 @@ proc do_global_tests {lang} { > set ptypefmt "type = (class|enum|union|struct) %s > $opt_underlying{.*}" > > with_test_prefix $lang { > - gdb_test_no_output "set language $lang" > + set_language "$lang" > gdb_test "ptype C" "type = class C {.*}" > gdb_test "print E" "= a" > gdb_test "ptype E" "type = enum E $opt_underlying{.*}" > @@ -102,7 +102,7 @@ with_test_prefix "in C::f" { > # Another hard-to-guess-the-users-intent bug... > # It would be really nice if we could query the user! > with_test_prefix "global collision" { > - gdb_test_no_output "set language c++" > + set_language "c++" > setup_kfail "c++/16463" "*-*-*" > gdb_test "print global" "= 3" > > diff --git a/gdb/testsuite/gdb.cp/virtfunc.exp > b/gdb/testsuite/gdb.cp/virtfunc.exp > index 7b8f672..c0ae27d 100644 > --- a/gdb/testsuite/gdb.cp/virtfunc.exp > +++ b/gdb/testsuite/gdb.cp/virtfunc.exp > @@ -270,7 +270,7 @@ proc test_info_vtbl {} { > } > > proc do_tests {} { > - gdb_test_no_output "set language c++" "" > + set_language "c++" > gdb_test_no_output "set width 0" "" > > if ![runto_main] then { > diff --git a/gdb/testsuite/gdb.dlang/circular.exp > b/gdb/testsuite/gdb.dlang/circular.exp > index 205cde2..09ac534 100644 > --- a/gdb/testsuite/gdb.dlang/circular.exp > +++ b/gdb/testsuite/gdb.dlang/circular.exp > @@ -139,7 +139,7 @@ if { [prepare_for_testing "failed to prepare" > ${testfile} \ > return -1 > } > > -gdb_test_no_output "set language d" > +set_language "d" > > if {![runto "circular1.found"]} { > return -1 > diff --git a/gdb/testsuite/gdb.dlang/debug-expr.exp > b/gdb/testsuite/gdb.dlang/debug-expr.exp > index d62dcc6..bd58421 100644 > --- a/gdb/testsuite/gdb.dlang/debug-expr.exp > +++ b/gdb/testsuite/gdb.dlang/debug-expr.exp > @@ -18,7 +18,7 @@ > if { [skip_d_tests] } { return -1 } > > gdb_start > -gdb_test_no_output "set language d" > +set_language "d" > gdb_test_no_output "set debug expression 1" > > # Test whether the expression debug machinery accepts the expression. > diff --git a/gdb/testsuite/gdb.dlang/demangle.exp > b/gdb/testsuite/gdb.dlang/demangle.exp > index baf6d6f..77b7968 100644 > --- a/gdb/testsuite/gdb.dlang/demangle.exp > +++ b/gdb/testsuite/gdb.dlang/demangle.exp > @@ -200,7 +200,7 @@ proc test_d_demangling {} { > gdb_exit > gdb_start > > -if [set_lang_d] { > +if [set_language "d"] { > gdb_test_no_output "set width 0" > > test_d_demangling > diff --git a/gdb/testsuite/gdb.dlang/expression.exp > b/gdb/testsuite/gdb.dlang/expression.exp > index 700f59b..9ec95a3 100644 > --- a/gdb/testsuite/gdb.dlang/expression.exp > +++ b/gdb/testsuite/gdb.dlang/expression.exp > @@ -128,7 +128,7 @@ proc test_d_expressions {} { > gdb_exit > gdb_start > > -if [set_lang_d] { > +if [set_language "d"] { > test_d_integer_literals > test_d_float_literals > test_d_expressions > diff --git a/gdb/testsuite/gdb.dlang/primitive-types.exp > b/gdb/testsuite/gdb.dlang/primitive-types.exp > index eec10ef..241cd6a 100644 > --- a/gdb/testsuite/gdb.dlang/primitive-types.exp > +++ b/gdb/testsuite/gdb.dlang/primitive-types.exp > @@ -54,7 +54,7 @@ proc test_builtin_d_types_accepted {} { > gdb_exit > gdb_start > > -if [set_lang_d] { > +if [set_language "d"] { > test_builtin_d_types_accepted > } else { > warning "D type tests suppressed." > diff --git a/gdb/testsuite/gdb.dlang/properties.exp > b/gdb/testsuite/gdb.dlang/properties.exp > index de95bd6..1ef8de3 100644 > --- a/gdb/testsuite/gdb.dlang/properties.exp > +++ b/gdb/testsuite/gdb.dlang/properties.exp > @@ -85,7 +85,7 @@ proc test_d_typeof {} { > gdb_exit > gdb_start > > -if [set_lang_d] { > +if [set_language "d"] { > test_d_sizeof > test_d_typeof > } else { > diff --git a/gdb/testsuite/gdb.dwarf2/arr-stride.exp > b/gdb/testsuite/gdb.dwarf2/arr-stride.exp > index e628d26..201072c 100644 > --- a/gdb/testsuite/gdb.dwarf2/arr-stride.exp > +++ b/gdb/testsuite/gdb.dwarf2/arr-stride.exp > @@ -88,7 +88,7 @@ if { [prepare_for_testing "failed to prepare" > ${testfile} \ > return -1 > } > > -gdb_test_no_output "set language ada" > +set_language "ada" > > gdb_test "ptype pck.table" \ > "type = array \\(0 \\.\\. 4\\) of pck\\.item elements>" > diff --git a/gdb/testsuite/gdb.dwarf2/arr-subrange.exp > b/gdb/testsuite/gdb.dwarf2/arr-subrange.exp > index 1cfffda..8f74448 100644 > --- a/gdb/testsuite/gdb.dwarf2/arr-subrange.exp > +++ b/gdb/testsuite/gdb.dwarf2/arr-subrange.exp > @@ -82,7 +82,7 @@ if { [prepare_for_testing "failed to prepare" > ${testfile} \ > return -1 > } > > -gdb_test_no_output "set language ada" > +set_language "ada" > > gdb_test "ptype pck.table" \ > "type = array \\(enum_000 \\.\\. enum_128\\) of boolean" > diff --git a/gdb/testsuite/gdb.dwarf2/data-loc.exp > b/gdb/testsuite/gdb.dwarf2/data-loc.exp > index 3e4c845..3ef93a8 100644 > --- a/gdb/testsuite/gdb.dwarf2/data-loc.exp > +++ b/gdb/testsuite/gdb.dwarf2/data-loc.exp > @@ -129,7 +129,7 @@ if ![runto_main] { > return -1 > } > > -gdb_test_no_output "set language ada" > +set_language "ada" > > # foo.three > > diff --git a/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp > b/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp > index d03d2ab..4fe0964 100644 > --- a/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp > +++ b/gdb/testsuite/gdb.dwarf2/dw2-cp-infcall-ref-static.exp > @@ -37,7 +37,7 @@ if ![runto_main] then { > } > > # main is not provided by DWARF. > -gdb_test_no_output "set language c++" > +set_language "c++" > > # There are no mangled names in DWARF to suggest the v3 ABI. > gdb_test_no_output "set cp-abi gnu-v3" > diff --git a/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp > b/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp > index 4275d5d..c339328 100644 > --- a/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp > +++ b/gdb/testsuite/gdb.dwarf2/dw2-linkage-name-trust.exp > @@ -39,7 +39,7 @@ if ![runto_main] then { > } > > # main is not provided by DWARF. > -gdb_test_no_output "set language c++" > +set_language "c++" > > # There are no mangled names in DWARF to suggest the v3 ABI. > gdb_test_no_output "set cp-abi gnu-v3" > diff --git a/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp > b/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp > index f7eff69..7567d82 100644 > --- a/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp > +++ b/gdb/testsuite/gdb.dwarf2/dynarr-ptr.exp > @@ -130,7 +130,7 @@ if ![runto_main] { > return -1 > } > > -gdb_test_no_output "set language ada" > +set_language "ada" > > # foo.three_ptr.all > > diff --git a/gdb/testsuite/gdb.dwarf2/subrange.exp > b/gdb/testsuite/gdb.dwarf2/subrange.exp > index 9c9df7d..3d00bf3 100644 > --- a/gdb/testsuite/gdb.dwarf2/subrange.exp > +++ b/gdb/testsuite/gdb.dwarf2/subrange.exp > @@ -65,7 +65,7 @@ if { [prepare_for_testing "failed to prepare" > ${testfile} \ > return -1 > } > > -gdb_test_no_output "set language pascal" > +set_language "pascal" > > gdb_test "ptype TByteArray" \ > "type = array \\\[0\\.\\.191\\\] of byte" > diff --git a/gdb/testsuite/gdb.fortran/exprs.exp > b/gdb/testsuite/gdb.fortran/exprs.exp > index 1aa7f4c..b9e42ef 100644 > --- a/gdb/testsuite/gdb.fortran/exprs.exp > +++ b/gdb/testsuite/gdb.fortran/exprs.exp > @@ -249,7 +249,7 @@ gdb_reinitialize_dir $srcdir/$subdir > > gdb_test "set print sevenbit-strings" "" > > -if [set_lang_fortran] then { > +if [set_language "fortran"] then { > test_value_history > test_convenience_variables > test_integer_literals_accepted > diff --git a/gdb/testsuite/gdb.fortran/types.exp > b/gdb/testsuite/gdb.fortran/types.exp > index 9549515..1c3d677 100644 > --- a/gdb/testsuite/gdb.fortran/types.exp > +++ b/gdb/testsuite/gdb.fortran/types.exp > @@ -80,7 +80,7 @@ gdb_reinitialize_dir $srcdir/$subdir > > gdb_test "set print sevenbit-strings" "" > > -if [set_lang_fortran] then { > +if [set_language "fortran"] then { > test_integer_literal_types_accepted > test_integer_literal_types_rejected > test_logical_literal_types_accepted > diff --git a/gdb/testsuite/gdb.go/basic-types.exp > b/gdb/testsuite/gdb.go/basic-types.exp > index 453e5e2..85d5849 100644 > --- a/gdb/testsuite/gdb.go/basic-types.exp > +++ b/gdb/testsuite/gdb.go/basic-types.exp > @@ -106,7 +106,7 @@ gdb_exit > gdb_start > gdb_reinitialize_dir $srcdir/$subdir > > -if [set_lang_go] { > +if [set_language "go"] { > test_integer_literal_types_accepted > test_logical_literal_types_accepted > test_character_literal_types_accepted > diff --git a/gdb/testsuite/gdb.go/print.exp > b/gdb/testsuite/gdb.go/print.exp > index c95dc09..01868f6 100644 > --- a/gdb/testsuite/gdb.go/print.exp > +++ b/gdb/testsuite/gdb.go/print.exp > @@ -62,7 +62,7 @@ gdb_exit > gdb_start > gdb_reinitialize_dir $srcdir/$subdir > > -if [set_lang_go] { > +if [set_language "go"] { > test_float_accepted > test_float_rejected > } else { > diff --git a/gdb/testsuite/gdb.objc/print.exp > b/gdb/testsuite/gdb.objc/print.exp > index 9ea4764..17703bb 100644 > --- a/gdb/testsuite/gdb.objc/print.exp > +++ b/gdb/testsuite/gdb.objc/print.exp > @@ -21,8 +21,6 @@ > # Test printing of various values. > # NOTE: The tests here intentionally do not require an objc compiler. > > -load_lib "objc.exp" > - > proc test_float_accepted {} { > global gdb_prompt > > @@ -63,7 +61,7 @@ gdb_exit > gdb_start > gdb_reinitialize_dir $srcdir/$subdir > > -if [set_lang_objc] { > +if [set_language "objective-c"] { > test_float_accepted > test_float_rejected > } else { > diff --git a/gdb/testsuite/gdb.opencl/datatypes.exp > b/gdb/testsuite/gdb.opencl/datatypes.exp > index 572e329..baf7be9 100644 > --- a/gdb/testsuite/gdb.opencl/datatypes.exp > +++ b/gdb/testsuite/gdb.opencl/datatypes.exp > @@ -36,7 +36,7 @@ gdb_exit > gdb_start > > # Manually switch the language to opencl > -gdb_test_no_output "set language opencl" "no prompt when setting the > language to opencl" > +set_language "opencl" "no prompt when setting the language to opencl" > > # Check OpenCL data types (GDB) > gdb_test "whatis bool" "type = bool" > @@ -194,8 +194,8 @@ gdb_test "whatis double16" "type = double16" > gdb_test "p sizeof(double16)" " = 128" > > # Set the language back to the default: "auto; currently c" > -gdb_test_no_output "set language c" "no prompt when setting the > language to c" > -gdb_test_no_output "set language auto" "no prompt when setting the > language to auto" > +set_language "c" "no prompt when setting the language to c" > +set_language "auto" "no prompt when setting the language to auto" > > # Load the OpenCL app > gdb_reinitialize_dir $srcdir/$subdir > diff --git a/gdb/testsuite/gdb.pascal/print.exp > b/gdb/testsuite/gdb.pascal/print.exp > index 458630d..eadbe3a 100644 > --- a/gdb/testsuite/gdb.pascal/print.exp > +++ b/gdb/testsuite/gdb.pascal/print.exp > @@ -63,7 +63,7 @@ gdb_exit > gdb_start > gdb_reinitialize_dir $srcdir/$subdir > > -if [set_lang_pascal] { > +if [set_language "pascal"] { > test_float_accepted > test_float_rejected > } else { > diff --git a/gdb/testsuite/gdb.pascal/types.exp > b/gdb/testsuite/gdb.pascal/types.exp > index 4a2374b..0e31673 100644 > --- a/gdb/testsuite/gdb.pascal/types.exp > +++ b/gdb/testsuite/gdb.pascal/types.exp > @@ -74,7 +74,7 @@ gdb_exit > gdb_start > gdb_reinitialize_dir $srcdir/$subdir > > -if [set_lang_pascal] then { > +if [set_language "pascal"] then { > test_integer_literal_types_accepted > test_logical_literal_types_accepted > test_character_literal_types_accepted > diff --git a/gdb/testsuite/gdb.python/py-lookup-type.exp > b/gdb/testsuite/gdb.python/py-lookup-type.exp > index 2f98052..de24bbb 100644 > --- a/gdb/testsuite/gdb.python/py-lookup-type.exp > +++ b/gdb/testsuite/gdb.python/py-lookup-type.exp > @@ -31,7 +31,7 @@ gdb_reinitialize_dir $srcdir/$subdir > if { [skip_python_tests] } { continue } > > proc test_lookup_type { lang type_name } { > - gdb_test_no_output "set language ${lang}" > + set_language "${lang}" > gdb_test "python print(gdb.lookup_type('${type_name}').name)" \ > "${type_name}" \ > "lookup type ${type_name} using language ${lang}" > diff --git a/gdb/testsuite/gdb.rust/expr.exp > b/gdb/testsuite/gdb.rust/expr.exp > index 415680b..4ed84c9 100644 > --- a/gdb/testsuite/gdb.rust/expr.exp > +++ b/gdb/testsuite/gdb.rust/expr.exp > @@ -23,7 +23,7 @@ gdb_start > > gdb_test_no_output "set var \$something = 27" > > -if {![set_lang_rust]} { > +if {![set_language "rust"]} { > warning "Rust expression tests suppressed." > continue > } > diff --git a/gdb/testsuite/lib/d-support.exp > b/gdb/testsuite/lib/d-support.exp > index ed568d3..3e5b457 100644 > --- a/gdb/testsuite/lib/d-support.exp > +++ b/gdb/testsuite/lib/d-support.exp > @@ -13,20 +13,6 @@ > # You should have received a copy of the GNU General Public License > # along with this program. If not, see > . > > -# Auxiliary function to set the language to D. > -# The result is 1 (true) for success, 0 (false) for failure. > - > -proc set_lang_d {} { > - if [gdb_test_no_output "set language d"] { > - return 0 > - } > - if [gdb_test "show language" ".* source language is \"d\"." \ > - "set language to \"d\""] { > - return 0 > - } > - return 1 > -} > - > # D version of runto_main. > > proc d_runto_main { } { > diff --git a/gdb/testsuite/lib/fortran.exp > b/gdb/testsuite/lib/fortran.exp > index 867e4fc..3e78315 100644 > --- a/gdb/testsuite/lib/fortran.exp > +++ b/gdb/testsuite/lib/fortran.exp > @@ -15,20 +15,6 @@ > # You should have received a copy of the GNU General Public License > # along with this program. If not, see > . > > -# Auxiliary function to set the language to fortran. > -# The result is 1 (true) for success, 0 (false) for failure. > - > -proc set_lang_fortran {} { > - if [gdb_test_no_output "set language fortran"] { > - return 0 > - } > - if [gdb_test "show language" ".* source language is \"fortran\"." > \ > - "set language to \"fortran\""] { > - return 0 > - } > - return 1 > -} > - > proc fortran_int4 {} { > if {[test_compiler_info {gcc-4-[012]-*}]} { > return "int4" > diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp > index 48bd7ee..ff076b9 100644 > --- a/gdb/testsuite/lib/gdb.exp > +++ b/gdb/testsuite/lib/gdb.exp > @@ -6018,6 +6018,49 @@ proc multi_line_input { args } { > return [join $args "\n"] > } > > +# Set the language and handle possible warnings output by GDB if > +# we select a language that differs from the current frame's language. > +# > +# The first argument is the language to be set. > +# > +# The second argument is an optional message to be output by the test. > If > +# the message is empty, the command to set the language will be used > instead. > + > +proc set_language { language { message "" } } { > + global gdb_prompt > + > + set command "set language $language" > + set lang_pattern [string_to_regexp $language] > + > + if { $message == "" } { > + set message $command > + } > + > + # Switch to the user-selected language. > + gdb_test_multiple $command $message { > + -re "Undefined item: \"$lang_pattern\"\.\[\r\n\]+$gdb_prompt" { > + fail $message > + return 0 > + } > + -re "Warning: the current language does not match this > frame.\[\r\n\]+$gdb_prompt $" { > + } > + -re "$gdb_prompt $" {} > + } > + > + # Verify the language has been set correctly. GDB may output a > warning > + # stating the user-provided language doesn't match the frame's > language. > + # We ignore that warning for testing purposes. > + if { $language != "auto" } { > + if [gdb_test "show language" ".* source language is > \"$lang_pattern\".*" $message] { > + return 0 > + } > + } else { > + if [gdb_test "show language" "The current source language is \"auto; > currently .*\"\." $message] { > + return 0 > + } > + } > + return 1 > +} > > # Always load compatibility stuff. > load_lib future.exp > diff --git a/gdb/testsuite/lib/go.exp b/gdb/testsuite/lib/go.exp > index c29b7c1..78a4e2c 100644 > --- a/gdb/testsuite/lib/go.exp > +++ b/gdb/testsuite/lib/go.exp > @@ -16,20 +16,6 @@ > # FIXME: Presumably skip_go_tests should be defined here, > # but for consistency with other languages it currently lives in > gdb.exp. > > -# Auxiliary function to set the language to Go. > -# The result is 1 (true) for success, 0 (false) for failure. > - > -proc set_lang_go {} { > - if [gdb_test_no_output "set language go"] { > - return 0 > - } > - if [gdb_test "show language" ".* source language is \"go\"." \ > - "set language to \"go\""] { > - return 0 > - } > - return 1 > -} > - > # Go version of runto_main. > > proc go_runto_main { } { > diff --git a/gdb/testsuite/lib/objc.exp b/gdb/testsuite/lib/objc.exp > deleted file mode 100644 > index 7189f03..0000000 > --- a/gdb/testsuite/lib/objc.exp > +++ /dev/null > @@ -1,30 +0,0 @@ > -# This test code is part of GDB, the GNU debugger. > - > -# Copyright 2010-2017 Free Software Foundation, Inc. > -# > -# This program is free software; you can redistribute it and/or modify > -# it under the terms of the GNU General Public License as published by > -# the Free Software Foundation; either version 3 of the License, or > -# (at your option) any later version. > -# > -# This program is distributed in the hope that it will be useful, > -# but WITHOUT ANY WARRANTY; without even the implied warranty of > -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > -# GNU General Public License for more details. > -# > -# You should have received a copy of the GNU General Public License > -# along with this program. If not, see > . > - > -# Auxiliary function to set the language to fortran. > -# The result is 1 (true) for success, 0 (false) for failure. > - > -proc set_lang_objc {} { > - if [gdb_test_no_output "set language objective-c"] { > - return 0 > - } > - if [gdb_test "show language" ".* source language is > \"objective-c\"." \ > - "set language to \"objective-c\""] { > - return 0 > - } > - return 1 > -} > diff --git a/gdb/testsuite/lib/pascal.exp > b/gdb/testsuite/lib/pascal.exp > index a0562c3..f0eb36b 100644 > --- a/gdb/testsuite/lib/pascal.exp > +++ b/gdb/testsuite/lib/pascal.exp > @@ -167,17 +167,3 @@ proc gdb_compile_pascal {source destfile type > options} { > return "Pascal compilation failed." > } > } > - > -# Auxiliary function to set the language to pascal. > -# The result is 1 (true) for success, 0 (false) for failure. > - > -proc set_lang_pascal {} { > - if [gdb_test_no_output "set language pascal"] { > - return 0 > - } > - if [gdb_test "show language" ".* source language is \"pascal\"." \ > - "set language to \"pascal\""] { > - return 0 > - } > - return 1 > -} > diff --git a/gdb/testsuite/lib/rust-support.exp > b/gdb/testsuite/lib/rust-support.exp > index 2a12cca..e6bda45 100644 > --- a/gdb/testsuite/lib/rust-support.exp > +++ b/gdb/testsuite/lib/rust-support.exp > @@ -13,19 +13,6 @@ > # You should have received a copy of the GNU General Public License > # along with this program. If not, see > . > > -# Auxiliary function to set the language to Rust. > -# The result is 1 (true) for success, 0 (false) for failure. > -proc set_lang_rust {} { > - if [gdb_test_no_output "set language rust"] { > - return 0 > - } > - if [gdb_test "show language" ".* source language is \"rust\"." \ > - "set language to \"rust\""] { > - return 0 > - } > - return 1 > -} > - > proc gdb_compile_rust {sources dest options} { > if {[llength $sources] > 1} { > error "gdb rust setup can only compile one source file at a time" LGTM.