From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id wekvF8BOjGqWVTwAWB0awg (envelope-from ) for ; Mon, 24 Aug 2026 10:01:36 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=k0vcKNBF; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=sS13uihS; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=m0TyUPm4; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=n3XEcI1+; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 56CE21E0A3; Mon, 24 Aug 2026 10:01:36 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-5.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 5947B1E033 for ; Mon, 24 Aug 2026 10:01:35 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6DB7F4BA901D for ; Mon, 24 Aug 2026 14:01:34 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6DB7F4BA901D Authentication-Results: sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=k0vcKNBF; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=sS13uihS; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=m0TyUPm4; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=n3XEcI1+ Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2a07:de40:b251:101:10:150:64:1]) by sourceware.org (Postfix) with ESMTPS id 8BDE64BA9031 for ; Mon, 24 Aug 2026 13:59:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8BDE64BA9031 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 8BDE64BA9031 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:1 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1787579953; cv=none; b=x9ilSSzEzMlA6df8jwJ4WYr62mmlJ2YQWxbwEZuBvmRPymj4ph7KA9cdrlWwmz+gQNQn7/m3941PNy5uouYi+PwsQMYtol03T231/RY1oqNCYjLGg0kbv9lLjllk/yBpNQoeU9ZeAY7Lm20Q0KC/nTneHaQ792AZFwvfG6kbFo8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1787579953; c=relaxed/simple; bh=kOqd+1b2Y4nSNX01pM/dxEdYfl9QPe/enMF7l2utuDk=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=CBG/xK5Gfl1KGoLumruwOStxoyx/0pO4BpGfTpd4mClHVd3y7ujQkPMS1N4zBxyzQSgUcNQtC/Xgh/OLJLFK5UJcT7Ldndni+OY9UHTh9o/Nczkjsgep9OJ07PrNutAsEkE43wfZelcKXtHiPWXzoMqT4SAJvixkmP2GbE5UgtM= ARC-Authentication-Results: i=1; sourceware.org; dkim=pass (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=k0vcKNBF; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=sS13uihS; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=m0TyUPm4; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=n3XEcI1+ DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8BDE64BA9031 Received: from imap1.dmz-prg2.suse.org (unknown [10.150.64.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 66985868C0 for ; Mon, 24 Aug 2026 13:59:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1787579948; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jvgMBZcGPMxmVH50X8scyhKWiQRPG2QyBbJ7dGyTEo0=; b=k0vcKNBFPDXpsvQqwuuS1xwfNmQbwWalWilXHM0saveuGO4vGioqsWo3xk0uatbLjn4oLP fVvS3HCHlYRVt4MDqztrodmBC+wp9MOMZeWJKl2v3ojy662p6rdb2x10zT7sn+2qBW95Dd IMhDv0Xp7dSJwR6VWliSbUJB0Y8y5dY= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1787579948; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jvgMBZcGPMxmVH50X8scyhKWiQRPG2QyBbJ7dGyTEo0=; b=sS13uihSXZPVoNMUTt9N90Hnv9PHIQYeeGU99MvQmIJA/wSlZDNi2GBktK+GeZTNLwehDn YNYPnCmGcXhMrgBw== Authentication-Results: smtp-out1.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1787579944; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jvgMBZcGPMxmVH50X8scyhKWiQRPG2QyBbJ7dGyTEo0=; b=m0TyUPm4wvefBoSRXAkjKf7wNUbBZdGP+S7rMKYXYe5rVX3/55zgcRcNLqIKWyFxlpMQ1L fxqBJspabfvRexXK+e/L0E4yA5FPbEnPEFM/Ny1Ypsp2EpVLHhn9yPBEKzWOP+ODEtVuHl Jdkj1sQS4iny9+ikegoaoBHqK7ODQNk= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1787579944; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jvgMBZcGPMxmVH50X8scyhKWiQRPG2QyBbJ7dGyTEo0=; b=n3XEcI1+L3ZjngR16WONvO7BwuzD4hFb5CEwkIEsNdaAHLcO2OXAhhHOEgTmYwQIKzbBSL DwzL0WoQmNR8AOAQ== Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id A460313408 for ; Mon, 24 Aug 2026 13:58:56 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id qLmuJiBOjGo+eQAAD6G6ig (envelope-from ) for ; Mon, 24 Aug 2026 13:58:56 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 08/11] [gdb/testsuite] Refactor exception handling in gdb_test_multiple Date: Mon, 24 Aug 2026 15:58:52 +0200 Message-ID: <20260824135855.1195963-9-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260824135855.1195963-1-tdevries@suse.de> References: <20260824135855.1195963-1-tdevries@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; MID_CONTAINS_FROM(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; ARC_NA(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[gnu.org:url,suse.de:mid,imap1.dmz-prg2.suse.org:helo]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_TLS_ALL(0.00)[] X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org Simplify gdb_test_multiple using return -options and try/finally. In the process, we also try to fix PR34553. I've added a test to verify this, but it'll be only useful after remote_expect gets fixed [1]. Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=34552 Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=34553 [1] https://debbugs.gnu.org/cgi/bugreport.cgi?bug=81691 --- gdb/testsuite/gdb.testsuite/gdb-test.exp | 51 ++++++++++++++++++++++++ gdb/testsuite/lib/gdb.exp | 37 +++++++++-------- 2 files changed, 69 insertions(+), 19 deletions(-) diff --git a/gdb/testsuite/gdb.testsuite/gdb-test.exp b/gdb/testsuite/gdb.testsuite/gdb-test.exp index dab65f21bdb..231f0755f58 100644 --- a/gdb/testsuite/gdb.testsuite/gdb-test.exp +++ b/gdb/testsuite/gdb.testsuite/gdb-test.exp @@ -49,6 +49,57 @@ with_test_prefix "cmd with trailing control code" { } } +foreach_with_prefix variant {0 1 2} { + proc level_2_inner {} { + if {$::variant == 0} { + return -level 2 "return_level_2" + } elseif {$::variant == 1} { + send_gdb "print 1\n" + set prompt_re [string_to_regexp "(gdb) "] + remote_expect host 10 { + -re " = 1\r\n$prompt_re$" { + return -level 2 "return_level_2" + } + } + } else { + gdb_test_multiple "print 1" "" { + -re -wrap " = 1" { + return -level 2 "return_level_2" + } + } + } + return "inner" + } + + proc level_2_outer {} { + level_2_inner + return "outer" + } + + try { + set res "initial" + set res [level_2_outer] + } finally { + if {$variant == 0} { + # trivial case. + gdb_assert {$res == "return_level_2"} + } elseif {$variant == 1} { + # Remove_expect case. + if {$res == "outer"} { + # Dejagnu bug. + # https://debbugs.gnu.org/cgi/bugreport.cgi?bug=81691 + setup_xfail *-*-* + } + gdb_assert {$res == "return_level_2"} + set variant1_res $res + } else { + # Gdb_test_multiple case. This should work if the remote_expect + # case works. + gdb_assert {$res == $variant1_res} + } + } +} + # Change the prompt. set prompt "(GDB) " set prompt_re "\\(GDB\\) $" diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 479d1229142..99468ac3ef3 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -1369,7 +1369,6 @@ proc gdb_test_multiple { command message args } { send_user "Message is \"$message\"\n" } - set result -1 set string "${command}\n" if { $command != "" } { set multi_line_re "\[\r\n\] *>" @@ -1574,25 +1573,25 @@ proc gdb_test_multiple { command message args } { } set gdb_test_name "$message" - set result 0 - set code [catch {gdb_expect $code} string] - - # Clean up the gdb_test_name variable. If we had a - # previous value then restore it, otherwise, delete the variable - # from the parent scope. - if { [info exists gdb_test_name_old] } { - set gdb_test_name "$gdb_test_name_old" - } else { - unset gdb_test_name - } - - if {$code == 1} { - global errorInfo errorCode - return -code error -errorinfo $errorInfo -errorcode $errorCode $string - } elseif {$code > 1} { - return -code $code $string + try { + if {[info exists result]} { + error "result set but not used" + } + set result 0 + if {[catch {gdb_expect $code} string opts] == 0} { + return $result + } + return -options [dict incr opts -level] $string + } finally { + # Clean up the gdb_test_name variable. If we had a + # previous value then restore it, otherwise, delete the variable + # from the parent scope. + if { [info exists gdb_test_name_old] } { + set gdb_test_name "$gdb_test_name_old" + } else { + unset gdb_test_name + } } - return $result } # Usage: gdb_test_multiline NAME INPUT RESULT {INPUT RESULT} ... -- 2.51.0