From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id tIAvE3dsiWqdmjUAWB0awg (envelope-from ) for ; Sat, 22 Aug 2026 05:31:35 -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=GuWr7ACD; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=lt+AvFq1; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=tadLkdjy; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=FX+26R1x; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 370851E033; Sat, 22 Aug 2026 05:31:35 -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 51AEB1E033 for ; Sat, 22 Aug 2026 05:31:33 -0400 (EDT) Received: from vm01.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 1DA7C4BB24D4 for ; Sat, 22 Aug 2026 09:31:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 1DA7C4BB24D4 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=GuWr7ACD; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=lt+AvFq1; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=tadLkdjy; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=FX+26R1x Received: from smtp-out2.suse.de (smtp-out2.suse.de [IPv6:2a07:de40:b251:101:10:150:64:2]) by sourceware.org (Postfix) with ESMTPS id CBB724B99F74 for ; Sat, 22 Aug 2026 09:31:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CBB724B99F74 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 CBB724B99F74 Authentication-Results: sourceware.org; arc=none smtp.remote-ip=2a07:de40:b251:101:10:150:64:2 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1787391067; cv=none; b=BUUS8gUoUg4HEkmKHha0Qy+rSPcziQx6whC7R+2CTchuYp5qOSRVByDzR2VSEyhpixS6gT0geYXgxjWXjBgsRsP23XU717BCPkqGbU5iYBKhyq/mteCuAC66KkKe6eEMf1OZVv+oT8S2ceKGt70aqG4FgVc5dFkh1ignkvFTqtc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1787391067; c=relaxed/simple; bh=S7S+BGkZSYEz1XGDasfgGwYdhHY1C3+XLcsIhhyyYVo=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=nCqcqyEBtb0DBRHsZsGNxbQHFvv0uehXGAl6pjaMeD6x1b3/Md1y6+9BulIDyu5xW7LtlbzLZsYJrN10KyCFavwVdgMUX7bGKcG8qrAlniTE775gs/wpQC7ZG5VSS2CMUtiQ5iISiVkyYU19jdiikhZBZSW8GnyQGiHlJorOdwc= 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=GuWr7ACD; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=lt+AvFq1; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=tadLkdjy; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=FX+26R1x DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CBB724B99F74 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-out2.suse.de (Postfix) with ESMTPS id 9AAD23F80 for ; Sat, 22 Aug 2026 09:30:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1787391062; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=3SzAm0FumehCxnvSgemkEa0PejGs5NkHUuCPRRqUmAw=; b=GuWr7ACD9yG0N4+Zttr6wcbeO79/Maglmq4F0urQ660x9VEA14JTgi6ndeKdvfoyicc/wp zAlEIaO6AKwMvmMogjMzweeyAyQULjhboKgams8ZZ3D9/eOCRw/Bd1pQHVX22D0sQO7jmn HCws5sOJf248iAksdFJtZJLR/o07mJE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1787391062; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=3SzAm0FumehCxnvSgemkEa0PejGs5NkHUuCPRRqUmAw=; b=lt+AvFq1aQHaahaTA1u18ak0a7jC8pWJqt2dg+fqYLWSgP0RW5vZgNVtYI+FB652UXl7X5 3EHWoAtPw/KUo3BA== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1787391058; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=3SzAm0FumehCxnvSgemkEa0PejGs5NkHUuCPRRqUmAw=; b=tadLkdjy+ZiS2XkYwtk61I+DTyhs4ov7prbFYOdKenDw/1o//7gmnwW+Rv70fdInQ3v9mZ xOf0goLv/pLmns7y9cC2U6TAvuhw+Lg1xTpRdQXfz2s3N25zT9NkcCB9pDmWKAuOQaR9b6 VbDDVxvhrywFohgFn4gTO8Bpk0tIzmk= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1787391058; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=3SzAm0FumehCxnvSgemkEa0PejGs5NkHUuCPRRqUmAw=; b=FX+26R1xA0Jgxzial3Gb+m+9C20EwQzzyMwaK600INP/RyCYTCGrJkHv50awpiIgXsOgR+ mQ9bJOQGTH+OFZDQ== 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 8174F12FF6 for ; Sat, 22 Aug 2026 09:30:58 +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 gifjHVJsiWqSdwAAD6G6ig (envelope-from ) for ; Sat, 22 Aug 2026 09:30:58 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH] [gdb/testsuite] Document return behavior in gdb_test_multiple Date: Sat, 22 Aug 2026 11:30:58 +0200 Message-ID: <20260822093058.3818336-1-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 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)[-0.999]; 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)[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 There are a few places in gdb_test_multiple where "return -1" is used. The first two simply cause proc gdb_test_multiple to return -1. The other two are in implicit clauses dealing with eof. Showing the first: ... append code { ... eof { perror "GDB process no longer exists" set wait_status [wait -i $gdb_spawn_id] verbose -log "GDB process exited with wait status $wait_status" if { $message != "" } { fail "$message" } # This does not return from gdb_test_multiple, but from the proc # above it. return -1 } ... The result of this is not that gdb_test_multiple returns -1. Instead, its caller does. This is defined behavior, focused mainly on handling break and continue in such a way that it has effect on the caller in code like this [1]: ... for {set i 1} {$i <= 10} {incr i} { gdb_test_multiple "print $i" "" { -re -wrap " = 5" {break} -re -wrap "" {} } } ... and return is simply treated the same way. The next question is why only for eof we use "return -1" instead of "set result -1". It could be argued that this facilitates a style: ... gdb_test_multiple "" "" {} gdb_test_multiple "" "" {} ... where at command 2 we can assume that gdb is still running, without having to check for the result of command 1. But if that were the intention, it would make sense that gdb_test would have the same behavior, and it doesn't. For now, document the behavior at the eof returns in proc gdb_test_multiple and add two tests in a pre-existing test-case checking current behavior. [1] https://sourceware.org/pipermail/gdb-patches/2011-November/086792.html --- gdb/testsuite/gdb.testsuite/gdb-test.exp | 43 ++++++++++++++++++++++++ gdb/testsuite/lib/gdb.exp | 7 ++++ 2 files changed, 50 insertions(+) diff --git a/gdb/testsuite/gdb.testsuite/gdb-test.exp b/gdb/testsuite/gdb.testsuite/gdb-test.exp index dab65f21bdb..8ae5325b5e6 100644 --- a/gdb/testsuite/gdb.testsuite/gdb-test.exp +++ b/gdb/testsuite/gdb.testsuite/gdb-test.exp @@ -49,6 +49,49 @@ with_test_prefix "cmd with trailing control code" { } } +proc quit {proc} { + with_override perror nop { + with_override fail nop { + if {$proc == "gdb_test_multiple"} { + set res [gdb_test_multiple "quit" "" {}] + # Not reached. + } elseif {$proc == "gdb_test"} { + set res [gdb_test "quit"] + # Reached. + } + return [expr {100 + $res}] + } + } + # Not reached. + return 200 +} + +with_test_prefix "eof handling" { + set res 300 + try { + set res [quit gdb_test_multiple] + } on return {result} { + } finally { + # Proc gdb_test_multiple does "return -1" on eof, which makes its + # caller return. Check that behavior. + gdb_assert {$res == -1} "gdb_test_multiple" + } + + clean_restart + + set res 300 + try { + set res [quit gdb_test] + } on return {result} { + } finally { + # Proc gdb_test_multiple does "return -1" on eof, which makes its caller + # return, which is gdb_test. Check that behavior. + gdb_assert {$res == 99} "gdb_test" + } + + clean_restart +} + # 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 1a6438f36a5..15ec71cb542 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -1522,6 +1522,8 @@ proc gdb_test_multiple { command message args } { if { $message != "" } { fail "$message" } + # This does not return from gdb_test_multiple, but from the proc + # above it. return -1 } } @@ -1542,6 +1544,8 @@ proc gdb_test_multiple { command message args } { if { $message != "" } { fail "$message" } + # This does not return from gdb_test_multiple, but from the proc + # above it. return -1 } full_buffer { @@ -12417,6 +12421,9 @@ proc unprintable_to_octal { input_string } { return $result } +# Ignore args and don't do anything. Can be used with proc with_override. +proc nop {args} {} + require {tcl_version_at_least 8 6 2} # Always load compatibility stuff. base-commit: 7c1f6faaf3bcd28a37d5f5a9737f6c1dcd0f13ef -- 2.51.0