From patchwork Tue Feb 18 10:59:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 38197 Received: (qmail 124688 invoked by alias); 18 Feb 2020 10:59:31 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 124680 invoked by uid 89); 18 Feb 2020 10:59:30 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_PASS autolearn=ham version=3.3.1 spammy=Ten X-HELO: mx2.suse.de Received: from mx2.suse.de (HELO mx2.suse.de) (195.135.220.15) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 18 Feb 2020 10:59:29 +0000 Received: from relay2.suse.de (unknown [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 0B0DFB21B; Tue, 18 Feb 2020 10:59:27 +0000 (UTC) Subject: [RFC][gdb/testsuite] Ignore pass in gdb_caching_proc From: Tom de Vries To: Simon Marchi , Tom Tromey Cc: gdb-patches@sourceware.org References: <20200213105754.GA22520@delia> <87imkapngd.fsf@tromey.com> <2319b744-2902-9c09-2448-450e40347c04@suse.de> Message-ID: Date: Tue, 18 Feb 2020 11:59:26 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.4.1 MIME-Version: 1.0 In-Reply-To: X-IsSubscribed: yes [ was : Re: [committed][gdb/testsuite] Handle missing gnatmake in gnat_runtime_has_debug_info ] On 18-02-2020 10:39, Tom de Vries wrote: > FWIW, I scanned a bit other gdb_caching_procs and there seems to be an > idiom to handle hitting the default case of an expect using a warning, > f.i. in skip_aarch64_sve_tests: > ... > default { > warning "\n$me: default case taken" > set skip_sve_tests 1 > } > ... > So we could use that at least for the last fail. > > Also, here and there verbose seems to be used instead of fail. > > The gdb_caching_procs seem to avoid explicitly calling pass and fail, > but usage of gdb_test_multiple does happen a couple of time, which might > result in fails etc (but then again, that might not have been > intentional, I'm not sure). > > In any case, we could either: > - forbid calling pass in gdb_caching_proc, or > - more accommodatingly, ignore pass in gdb_caching_proc. > Both by renaming pass in gdb_do_cache. > > Likewise, we could perhaps redirect fails to warnings. This RFC patch implements "ignore pass in gdb_caching_proc". Any comments? Thanks, - Tom [gdb/testsuite] Ignore pass in gdb_caching_proc gdb/testsuite/ChangeLog: 2020-02-18 Tom de Vries * lib/cache.exp (ignore_pass, gdb_do_cache_wrap): New proc. (gdb_do_cache): Use gdb_do_cache_wrap. * gdb.base/gdb-caching-proc.exp (test_proc): Use gdb_do_cache_wrap. --- gdb/testsuite/gdb.base/gdb-caching-proc.exp | 4 ++-- gdb/testsuite/lib/cache.exp | 29 ++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/gdb/testsuite/gdb.base/gdb-caching-proc.exp b/gdb/testsuite/gdb.base/gdb-caching-proc.exp index b2d71a5e7d..3810347a65 100644 --- a/gdb/testsuite/gdb.base/gdb-caching-proc.exp +++ b/gdb/testsuite/gdb.base/gdb-caching-proc.exp @@ -28,7 +28,7 @@ proc test_proc { name } { set resultlist [list] - set first [$real_name] + set first [gdb_do_cache_wrap $real_name] lappend resultlist $first # Ten repetitions was enough to trigger target_supports_scheduler_locking, @@ -37,7 +37,7 @@ proc test_proc { name } { set racy 0 for {set i 0} {$i < $repeat} {incr i} { - set rerun [$real_name] + set rerun [gdb_do_cache_wrap $real_name] lappend resultlist $rerun if { $rerun != $first } { set racy 1 diff --git a/gdb/testsuite/lib/cache.exp b/gdb/testsuite/lib/cache.exp index dc57cab964..357d232ae3 100644 --- a/gdb/testsuite/lib/cache.exp +++ b/gdb/testsuite/lib/cache.exp @@ -17,6 +17,33 @@ # The in-memory cache. array set gdb_data_cache {} +proc ignore_pass { msg } { + verbose -log "gdb_do_cache_wrap ignoring pass: $msg" +} + +proc gdb_do_cache_wrap {real_name} { + if { [info procs save_pass] != "" } { + return [uplevel 2 $real_name] + } + + rename pass save_pass + rename ignore_pass pass + + set code [catch {uplevel 2 $real_name} result] + + rename pass ignore_pass + rename save_pass pass + + if {$code == 1} { + global errorInfo errorCode + return -code error -errorinfo $errorInfo -errorcode $errorCode $result + } elseif {$code > 1} { + return -code $code $result + } + + return $result +} + # A helper for gdb_caching_proc that handles the caching. proc gdb_do_cache {name} { @@ -46,7 +73,7 @@ proc gdb_do_cache {name} { } set real_name gdb_real__$name - set gdb_data_cache($cache_name) [uplevel 1 $real_name] + set gdb_data_cache($cache_name) [gdb_do_cache_wrap $real_name] if {[info exists GDB_PARALLEL]} { verbose "$name: returning '$gdb_data_cache($cache_name)' and writing file" 2