From patchwork Fri May 1 12:44:55 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 134318 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id DB6AE46A9CD8 for ; Fri, 1 May 2026 12:45:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DB6AE46A9CD8 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=DKoWHfZ+; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=hbouWtcp; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=DKoWHfZ+; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=hbouWtcp X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org 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 81A1A44115D5 for ; Fri, 1 May 2026 12:45:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 81A1A44115D5 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 81A1A44115D5 Authentication-Results: server2.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=1777639512; cv=none; b=uj6mMGMh778Xj2YCG1jMPEJt6rovcjdlhFCbG9RRTksRsZCe6fM6wvajQs04zlLITdUEAnix+jA5Sa5Aquqb21Oe2v+SsRDY+4+4fCVkGhrjeTrhAat5qTAQwKBqQjRrrQWdJlbFAMmNiRYsiX0rPcua7h3Vr3EoWxu3W/CFzoI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639512; c=relaxed/simple; bh=POZ0/MEVwJBcR22+FuFR04YlBIMC5Fs8Z6FU1p12uYg=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=hT9JQf5YO7dL2Z0a8y3KT9gyOvHka2ogzvMcGrRicXg4QPf2/06K91K/UhYG8heSMBc+Rt8qTybVIeQc3z1eQrYSzqah5p3HWy5p+TJoca4I5wc29Vobq5szXnnEuIUDESBFMNq7w4BQrDZ7LOl45tImoMSpSLcUMiQQQ/WmrXU= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 81A1A44115D5 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 DDBB15BD1E for ; Fri, 1 May 2026 12:45:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639505; 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=Eb2IEIMAWilkORBGyWbldyCGyV31GKK7e7WrOE6Ff38=; b=DKoWHfZ+t0eyovbWb/nEeE+VigAttzs4zoEkRiS2LwkHUNM56Og5x85PiJrzjCDtm1tdna 5VnEoyNvWujAr6BC9Cnv101UlFOBZ61dPU5eHxkgazXOx0R8Iy+Me832vbXzZ6yhwabUjs ecLLoY78GD7YnRb151BlFEpmqJ00bBU= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639505; 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=Eb2IEIMAWilkORBGyWbldyCGyV31GKK7e7WrOE6Ff38=; b=hbouWtcp5KRvwFeJrhUqGN8679mIKtZS3Z7TL40h+YS8EiazE0zMVARn/gtVH5qtdUCTr/ KvGCP6rSoileHpDg== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639505; 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=Eb2IEIMAWilkORBGyWbldyCGyV31GKK7e7WrOE6Ff38=; b=DKoWHfZ+t0eyovbWb/nEeE+VigAttzs4zoEkRiS2LwkHUNM56Og5x85PiJrzjCDtm1tdna 5VnEoyNvWujAr6BC9Cnv101UlFOBZ61dPU5eHxkgazXOx0R8Iy+Me832vbXzZ6yhwabUjs ecLLoY78GD7YnRb151BlFEpmqJ00bBU= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639505; 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=Eb2IEIMAWilkORBGyWbldyCGyV31GKK7e7WrOE6Ff38=; b=hbouWtcp5KRvwFeJrhUqGN8679mIKtZS3Z7TL40h+YS8EiazE0zMVARn/gtVH5qtdUCTr/ KvGCP6rSoileHpDg== 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 C25FE593B1 for ; Fri, 1 May 2026 12:45:05 +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 CK4qLlGg9Gn5ZwAAD6G6ig (envelope-from ) for ; Fri, 01 May 2026 12:45:05 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 01/10] [gdb] Use block::containing_function Date: Fri, 1 May 2026 14:44:55 +0200 Message-ID: <20260501124504.2233495-2-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260501124504.2233495-1-tdevries@suse.de> References: <20260501124504.2233495-1-tdevries@suse.de> MIME-Version: 1.0 X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[99.99%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; FUZZY_RATELIMITED(0.00)[rspamd.com]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,suse.de:mid]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; RCVD_TLS_ALL(0.00)[] X-Spam-Score: -2.80 X-Spam-Level: X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org Add uses of block::containing_function. --- gdb/go-lang.c | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/gdb/go-lang.c b/gdb/go-lang.c index 3b388c961fa..657679f3fe8 100644 --- a/gdb/go-lang.c +++ b/gdb/go-lang.c @@ -430,28 +430,21 @@ go_symbol_package_name (const struct symbol *sym) gdb::unique_xmalloc_ptr go_block_package_name (const struct block *block) { - while (block != NULL) - { - struct symbol *function = block->function (); - - if (function != NULL) - { - gdb::unique_xmalloc_ptr package_name - = go_symbol_package_name (function); - - if (package_name != NULL) - return package_name; + struct symbol *function + = block != nullptr ? block->containing_function () : nullptr; + if (function == nullptr) + return nullptr; - /* Stop looking if we find a function without a package name. - We're most likely outside of Go and thus the concept of the - "current" package is gone. */ - return NULL; - } + gdb::unique_xmalloc_ptr package_name + = go_symbol_package_name (function); - block = block->superblock (); - } + if (package_name != nullptr) + return package_name; - return NULL; + /* Stop looking if we find a function without a package name. + We're most likely outside of Go and thus the concept of the + "current" package is gone. */ + return nullptr; } /* See language.h. */ From patchwork Fri May 1 12:44:56 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 134319 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id D071346A9CE6 for ; Fri, 1 May 2026 12:46:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D071346A9CE6 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=Q5/VgeiN; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=2NL+lnay; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=Q5/VgeiN; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=2NL+lnay X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by sourceware.org (Postfix) with ESMTPS id E7DB04374234 for ; Fri, 1 May 2026 12:45:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E7DB04374234 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 E7DB04374234 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639518; cv=none; b=U+qkiGf6lXGabb+iwaxn5Ld4swmUSOfdlzjf6N8I/Lpyrn6WZO39HBghe9A4h34D1E4u0TWmS/Xj+o5x8eAdptPzueeH1KkKWzIu7kaQUUFc/ATJVNr0MoWgWrbGIhE6uCl0bje8nPKYar0v43ACrDW6djPRZX0m+mXzKIFHRTY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639518; c=relaxed/simple; bh=eFItGn9feOEAfA87ctYPa+6N+WOSUqlw1pdaGMiWrSU=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=huEDtq0PKXzMHnpaQK8L1eloWMCrGqOoCfur3MWTyQ/tfTd5VowkFiocRVxm0K2wrchjjOJQaTvkCxdNldU7CLkSE33Z5Qy6x7aQfNgTIKmYTOFggQ2OQ9LxhRWFxg87wEWxGv/eHbZ6DIikQNCgOr4CD8EBUG+fMeXLiQHKjt4= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E7DB04374234 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 017405BD25 for ; Fri, 1 May 2026 12:45:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=a3jUHh/O/uQjEBxqD7RmK7WWdKrWKmoq3xQcoBPMWG0=; b=Q5/VgeiNxQzaX46Kx54xbwm3B1vnM7olN27KdJAuzPjYQj3jlz1aFxO/Fq0l2i4hIBoKhA xIVdgL9/48S1QZsLwD8RXV3s2nMX8gSOOg154N1iNyT4TmOsJ+PyrhuUIEA/JHSLuQrh6U 1zaeT8vg80TpM/b+lazaIO1amx6ZFV8= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=a3jUHh/O/uQjEBxqD7RmK7WWdKrWKmoq3xQcoBPMWG0=; b=2NL+lnay/14eEylyLK0HF+jraS8tGuEmc8rhLXFWHTG4RgdXVoQeH3u6B1+nuO8S8o4Iwr u11HEAbYq1/QVmCw== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=a3jUHh/O/uQjEBxqD7RmK7WWdKrWKmoq3xQcoBPMWG0=; b=Q5/VgeiNxQzaX46Kx54xbwm3B1vnM7olN27KdJAuzPjYQj3jlz1aFxO/Fq0l2i4hIBoKhA xIVdgL9/48S1QZsLwD8RXV3s2nMX8gSOOg154N1iNyT4TmOsJ+PyrhuUIEA/JHSLuQrh6U 1zaeT8vg80TpM/b+lazaIO1amx6ZFV8= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=a3jUHh/O/uQjEBxqD7RmK7WWdKrWKmoq3xQcoBPMWG0=; b=2NL+lnay/14eEylyLK0HF+jraS8tGuEmc8rhLXFWHTG4RgdXVoQeH3u6B1+nuO8S8o4Iwr u11HEAbYq1/QVmCw== 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 DE676593B2 for ; Fri, 1 May 2026 12:45:05 +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 aATwNFGg9Gn5ZwAAD6G6ig (envelope-from ) for ; Fri, 01 May 2026 12:45:05 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 02/10] [gdb] Factor out block::containing_function_block Date: Fri, 1 May 2026 14:44:56 +0200 Message-ID: <20260501124504.2233495-3-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260501124504.2233495-1-tdevries@suse.de> References: <20260501124504.2233495-1-tdevries@suse.de> MIME-Version: 1.0 X-Spam-Score: -2.80 X-Spam-Level: X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[99.99%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; FUZZY_RATELIMITED(0.00)[rspamd.com]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,imap1.dmz-prg2.suse.org:helo]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; RCVD_TLS_ALL(0.00)[] X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org Factor out new function block::containing_function_block out of block::containing_function. --- gdb/block.c | 18 ++++++++++++++---- gdb/block.h | 5 +++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/gdb/block.c b/gdb/block.c index e7424c52aff..7b006617d1a 100644 --- a/gdb/block.c +++ b/gdb/block.c @@ -99,15 +99,25 @@ block::linkage_function () const /* See block.h. */ -struct symbol * -block::containing_function () const +const struct block * +block::containing_function_block () const { const block *bl = this; - while (bl->function () == NULL && bl->superblock () != NULL) + while (bl->function () == nullptr && bl->superblock () != nullptr) bl = bl->superblock (); - return bl->function (); + return bl->function () != nullptr ? bl : nullptr; +} + +/* See block.h. */ + +struct symbol * +block::containing_function () const +{ + const block *bl = containing_function_block (); + + return bl != nullptr ? bl->function () : nullptr; } /* See block.h. */ diff --git a/gdb/block.h b/gdb/block.h index cd02006f860..b70b27f6509 100644 --- a/gdb/block.h +++ b/gdb/block.h @@ -258,6 +258,11 @@ struct block : public allocate_on_obstack struct symbol *containing_function () const; + /* Return the block for the closest enclosing function, which might be an + inline function. */ + + const struct block *containing_function_block () const; + /* Return the static block associated with this block. Return NULL if block is a global block. */ From patchwork Fri May 1 12:44:57 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 134317 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 694AE46A9CE0 for ; Fri, 1 May 2026 12:45:49 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 694AE46A9CE0 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=W2462y1Z; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=xV0HLnMu; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=W2462y1Z; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=xV0HLnMu X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org 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 C316844115C6 for ; Fri, 1 May 2026 12:45:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C316844115C6 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 C316844115C6 Authentication-Results: server2.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=1777639507; cv=none; b=jg1MQiV2DfXMfOmRA6McxOb+Ji+E7LRCKkZJFHeQV0H7S9hhpMMwlVjIrRYdRrKSN0wS/hDMBpWmkUZeqyrpKiWeZBJBYOojWSQCHgSu4sH8aLcCLEH7RJxhs3lQCE9fih7pCQEvdG8kcQWuRZepvN82wmFLNwxES3iYs6knERw= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639507; c=relaxed/simple; bh=GRyFmk8rkk+bhUU5T+RWlKT09lhUeyv4Tfr/5+T276s=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=EVhmfEnL/C9JwkDBoFx2TzXjoMz0HQNGD1RV+dhgHv9TVke9i9aoRKZuhfbnhIMlCNYK4+XsVih/M6fp7/t2HSRBtoNQ0U8mopr8a/zKWQghRxPYsSmXukzMd9d1mJj2W96CmRA38/cF1kZDpEh2GZ24D/i229P2uoY9bXJSucY= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C316844115C6 Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104: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 1A2FB6A8B5 for ; Fri, 1 May 2026 12:45:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=NE7xjleaBfRDQc/hWsPCUPo/TsloAQoNiFCQ9pgWTtY=; b=W2462y1Zr74k2jtukAi1ot1EEyH1g2ODGT9d7CJJVCa8Kr1lIaszsqz2e4EOYnRBulo8KH NfBCjBk8tw04mZJjIoVGDmd/T7pJ4kN1VrXJs5K7rY01a3yYdnQvk2pSLxItXFwP/joHTo sAAsCVo2ud7IluutlbZsvgXZ5m8nNC0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=NE7xjleaBfRDQc/hWsPCUPo/TsloAQoNiFCQ9pgWTtY=; b=xV0HLnMulqr4hvDj1AaQSXl2xuPIdrh4zdx1WgzaLZhUS/3vsUy20l92QzzIsdc7UvEXx3 DqW2xZnxyYhQDkDg== Authentication-Results: smtp-out1.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=W2462y1Z; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=xV0HLnMu DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=NE7xjleaBfRDQc/hWsPCUPo/TsloAQoNiFCQ9pgWTtY=; b=W2462y1Zr74k2jtukAi1ot1EEyH1g2ODGT9d7CJJVCa8Kr1lIaszsqz2e4EOYnRBulo8KH NfBCjBk8tw04mZJjIoVGDmd/T7pJ4kN1VrXJs5K7rY01a3yYdnQvk2pSLxItXFwP/joHTo sAAsCVo2ud7IluutlbZsvgXZ5m8nNC0= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=NE7xjleaBfRDQc/hWsPCUPo/TsloAQoNiFCQ9pgWTtY=; b=xV0HLnMulqr4hvDj1AaQSXl2xuPIdrh4zdx1WgzaLZhUS/3vsUy20l92QzzIsdc7UvEXx3 DqW2xZnxyYhQDkDg== 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 06EDB593B0 for ; Fri, 1 May 2026 12:45:06 +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 QNhzAFKg9Gn5ZwAAD6G6ig (envelope-from ) for ; Fri, 01 May 2026 12:45:06 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 03/10] [gdb] Use block::containing_function_block Date: Fri, 1 May 2026 14:44:57 +0200 Message-ID: <20260501124504.2233495-4-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260501124504.2233495-1-tdevries@suse.de> References: <20260501124504.2233495-1-tdevries@suse.de> MIME-Version: 1.0 X-Rspamd-Action: no action X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[99.99%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; RCPT_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+]; FUZZY_RATELIMITED(0.00)[rspamd.com]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; FROM_HAS_DN(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:dkim,suse.de:mid,imap1.dmz-prg2.suse.org:helo,imap1.dmz-prg2.suse.org:rdns]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_TLS_ALL(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:104:10:150:64:97:from]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; DKIM_TRACE(0.00)[suse.de:+] X-Rspamd-Queue-Id: 1A2FB6A8B5 X-Spam-Score: -3.01 X-Spam-Level: X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org Add uses of block::containing_function_block. --- gdb/guile/scm-frame.c | 13 ++++++------- gdb/linespec.c | 15 +++++++-------- gdb/python/py-frame.c | 13 ++++++------- gdb/python/py-unwind.c | 13 +++++-------- 4 files changed, 24 insertions(+), 30 deletions(-) diff --git a/gdb/guile/scm-frame.c b/gdb/guile/scm-frame.c index 722a754caab..ffcc3049074 100644 --- a/gdb/guile/scm-frame.c +++ b/gdb/guile/scm-frame.c @@ -598,7 +598,7 @@ static SCM gdbscm_frame_block (SCM self) { frame_smob *f_smob; - const struct block *block = NULL, *fn_block; + const struct block *block = nullptr; bool found = false; f_smob = frscm_get_frame_smob_arg_unsafe (self, SCM_ARG1, FUNC_NAME); @@ -625,12 +625,11 @@ gdbscm_frame_block (SCM self) _("")); } - for (fn_block = block; - fn_block != NULL && fn_block->function () == NULL; - fn_block = fn_block->superblock ()) - continue; - - if (block == NULL || fn_block == NULL || fn_block->function () == NULL) + const struct block *fn_block + = (block != nullptr + ? block->containing_function_block () + : nullptr); + if (fn_block == nullptr) { scm_misc_error (FUNC_NAME, _("cannot find block for frame"), scm_list_1 (self)); diff --git a/gdb/linespec.c b/gdb/linespec.c index 45e12e09272..6ed4b4553d3 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -3860,17 +3860,16 @@ find_label_symbols (struct linespec_state *self, set_current_program_space (self->program_space); block = get_current_search_block (); - for (; - block && !block->function (); - block = block->superblock ()) - ; - - if (!block) + const struct block *fn_block + = (block != nullptr + ? block->containing_function_block () + : nullptr); + if (fn_block == nullptr) return {}; - fn_sym = block->function (); + fn_sym = fn_block->function (); - find_label_symbols_in_block (block, name, fn_sym, completion_mode, + find_label_symbols_in_block (fn_block, name, fn_sym, completion_mode, &result, label_funcs_ret); } else diff --git a/gdb/python/py-frame.c b/gdb/python/py-frame.c index 1420d2ac5b9..42a281b9712 100644 --- a/gdb/python/py-frame.c +++ b/gdb/python/py-frame.c @@ -299,7 +299,7 @@ static PyObject * frapy_block (PyObject *self, PyObject *args) { frame_info_ptr frame; - const struct block *block = NULL, *fn_block; + const struct block *block = nullptr; try { @@ -311,12 +311,11 @@ frapy_block (PyObject *self, PyObject *args) return gdbpy_handle_gdb_exception (nullptr, except); } - for (fn_block = block; - fn_block != NULL && fn_block->function () == NULL; - fn_block = fn_block->superblock ()) - ; - - if (block == NULL || fn_block == NULL || fn_block->function () == NULL) + const struct block *fn_block + = (block != nullptr + ? block->containing_function_block () + : nullptr); + if (fn_block == nullptr) { PyErr_SetString (PyExc_RuntimeError, _("Cannot locate block for frame.")); diff --git a/gdb/python/py-unwind.c b/gdb/python/py-unwind.c index dcf86f7db3d..6dc5e11cf87 100644 --- a/gdb/python/py-unwind.c +++ b/gdb/python/py-unwind.c @@ -646,14 +646,11 @@ pending_framepy_block (PyObject *self, PyObject *args) return gdbpy_handle_gdb_exception (nullptr, except); } - for (fn_block = block; - fn_block != nullptr && fn_block->function () == nullptr; - fn_block = fn_block->superblock ()) - ; - - if (block == nullptr - || fn_block == nullptr - || fn_block->function () == nullptr) + const struct block *fn_block + = (block != nullptr + ? block->containing_function_block () + : nullptr); + if (fn_block == nullptr) { PyErr_SetString (PyExc_RuntimeError, _("Cannot locate block for frame.")); From patchwork Fri May 1 12:44:58 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 134321 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 153F546A9CCA for ; Fri, 1 May 2026 12:46:43 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 153F546A9CCA 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=vHlChF5j; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=0Z+NxF4E; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=vHlChF5j; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=0Z+NxF4E X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org 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 BB2CE436F7DE for ; Fri, 1 May 2026 12:45:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org BB2CE436F7DE 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 BB2CE436F7DE Authentication-Results: server2.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=1777639524; cv=none; b=A+7HGDmQ9cimaPL1QXQckt+TuMbJnFe1yu0K8EMtpL5x7NObwRCqE3aTN/VLgaHncG2y9oz1ypky0urEkMstSSjHzxhHUWM7EhOCGRsM3i7zOKUNjwLy9QyfeXiL97nWlj32hA5sqA4xbU455NddDWG9i4akrbfkfmY09/rZrsc= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639524; c=relaxed/simple; bh=sJG50AaGHCwdZAQwTtVr5XOyEwosfJXrHpsBUNEoTGc=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=YE4a3etabY8IDQBfJJv0IoOWDxTFOJeTv2937TkduRW1vryefIZ+2EQR6habNiWHdErg1baO4OhjeaK2RHE0RaF8WQTBbRgDzC0sSCvVf4xGqOO5vvsxaFKlUPcUAud+tkuhG7FDc0jzu7/E8s6auZ7z4OgXXfbx1CxwJ5L12dQ= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BB2CE436F7DE Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104: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 38DF25BD32 for ; Fri, 1 May 2026 12:45:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=P7s9d/IQ2KQB1/SA7wHx6u+aSxXao+1aNiXsnYedAFQ=; b=vHlChF5jd6HRnAeIxE40IxtSP3lrd3gx9t6b3+cr8Wwazii9XX21AZiTtipzXMRpmzX8Ig 2qJYLF+l/Rr4LbRDFBEqywqic5r4LHd71RWPX3NJbJdPON75nCUuHCTNXSDS+VTO9VsHlw N7Vue0ZgE/VVmScZ7DxWlEk1wx7dGiM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=P7s9d/IQ2KQB1/SA7wHx6u+aSxXao+1aNiXsnYedAFQ=; b=0Z+NxF4EKuOM9wzZS6xqA0gDYi8BjVzLrIbdyef8hJt3unqLzTvdJVEIKG0qUxrxfI7tMR zFbtoeiDEABADbCg== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=vHlChF5j; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=0Z+NxF4E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=P7s9d/IQ2KQB1/SA7wHx6u+aSxXao+1aNiXsnYedAFQ=; b=vHlChF5jd6HRnAeIxE40IxtSP3lrd3gx9t6b3+cr8Wwazii9XX21AZiTtipzXMRpmzX8Ig 2qJYLF+l/Rr4LbRDFBEqywqic5r4LHd71RWPX3NJbJdPON75nCUuHCTNXSDS+VTO9VsHlw N7Vue0ZgE/VVmScZ7DxWlEk1wx7dGiM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=P7s9d/IQ2KQB1/SA7wHx6u+aSxXao+1aNiXsnYedAFQ=; b=0Z+NxF4EKuOM9wzZS6xqA0gDYi8BjVzLrIbdyef8hJt3unqLzTvdJVEIKG0qUxrxfI7tMR zFbtoeiDEABADbCg== 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 223A4593B1 for ; Fri, 1 May 2026 12:45:06 +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 mHvgBlKg9Gn5ZwAAD6G6ig (envelope-from ) for ; Fri, 01 May 2026 12:45:06 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 04/10] [gdb] Add unit test for next_iterator Date: Fri, 1 May 2026 14:44:58 +0200 Message-ID: <20260501124504.2233495-5-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260501124504.2233495-1-tdevries@suse.de> References: <20260501124504.2233495-1-tdevries@suse.de> MIME-Version: 1.0 X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; RCPT_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+]; FUZZY_RATELIMITED(0.00)[rspamd.com]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; FROM_HAS_DN(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,imap1.dmz-prg2.suse.org:rdns,suse.de:dkim,suse.de:mid,gnu.org:url]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_TLS_ALL(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:104:10:150:64:97:from]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; DKIM_TRACE(0.00)[suse.de:+] X-Rspamd-Action: no action X-Spam-Score: -3.01 X-Spam-Level: X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: 38DF25BD32 X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org I noticed that next_iterator doesn't have a selftest. Add this. --- gdb/Makefile.in | 1 + gdb/unittests/next-iterator-selftests.c | 105 ++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 gdb/unittests/next-iterator-selftests.c diff --git a/gdb/Makefile.in b/gdb/Makefile.in index e38ba95eebd..8b1a40dad7e 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -476,6 +476,7 @@ SELFTESTS_SRCS = \ unittests/lookup_name_info-selftests.c \ unittests/memory-map-selftests.c \ unittests/memrange-selftests.c \ + unittests/next-iterator-selftests.c \ unittests/offset-type-selftests.c \ unittests/observable-selftests.c \ unittests/packed-selftests.c \ diff --git a/gdb/unittests/next-iterator-selftests.c b/gdb/unittests/next-iterator-selftests.c new file mode 100644 index 00000000000..8934e5bbaa0 --- /dev/null +++ b/gdb/unittests/next-iterator-selftests.c @@ -0,0 +1,105 @@ +/* Self tests for the next_iterator class. + + Copyright (C) 2026 Free Software Foundation, Inc. + + This file is part of GDB. + + 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 . */ + +#include "gdbsupport/selftest.h" +#include "gdbsupport/next-iterator.h" +#include + +namespace selftests { +namespace next_iterator { + +struct list; +using list_iterator = ::next_iterator; +using list_range = next_range; + +/* The next_iterator allows usage with an incomplete type, provided the type + is defined later in the same file. While not essential to its functioning, + we're currently using this property in the sources, so check/demonstrate + it. */ + +static void +test_next_iterator_incomplete_type (struct list *l) +{ + list_iterator begin (l); + list_iterator end; + + unsigned cnt = 0; + list_iterator i; + for (i = begin; i != end; ++i) + cnt++; + SELF_CHECK (cnt == 3); +} + +struct list +{ + int i; + struct list *next; +}; + +static void +test_next_iterator () +{ + struct list a = { 1, nullptr }; + struct list b = { 2, &a }; + struct list c = { 3, &b }; + + /* Constructor with parameter. */ + list_iterator begin (&c); + + /* Constructor without parameter. */ + list_iterator end; + + /* Operator*. */ + SELF_CHECK (*begin == &c); + SELF_CHECK (*end == nullptr); + + /* Operator==, operator!=. */ + SELF_CHECK (begin == begin); + SELF_CHECK (end == end); + SELF_CHECK (begin != end); + + /* Operator++. */ + list_iterator i (&c); + ++i; + SELF_CHECK (*i == &b); + + /* Loop using iterators. */ + std::vector expected = {3, 2, 1}; + std::vector v; + for (i = begin; i != end; ++i) + v.push_back ((*i)->i); + SELF_CHECK (v == expected); + + /* Loop using range. */ + v.clear (); + for (auto l : list_range (begin)) + v.push_back (l->i); + SELF_CHECK (v == expected); + + test_next_iterator_incomplete_type (&c); +} + +} /* namespace next_iterator */ +} /* namespace selftests */ + +INIT_GDB_FILE (next_iterator_selftests) +{ + selftests::register_test ("next-iterator", + selftests::next_iterator::test_next_iterator); +} From patchwork Fri May 1 12:44:59 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 134324 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 3854E46A9CC8 for ; Fri, 1 May 2026 12:48:20 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3854E46A9CC8 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=ffFt40mr; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=xtIwGYWF; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=ffFt40mr; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=xtIwGYWF X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by sourceware.org (Postfix) with ESMTPS id DE5494099CE8 for ; Fri, 1 May 2026 12:45:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DE5494099CE8 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 DE5494099CE8 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639535; cv=none; b=TD0lV1NU73Apulfte5skU5bHzVNh0Yin6XiTgEHC6fOUq5qI/+uTpXGY3vouV68ltJYe2puyxIQYb13E64TDacgue5E+6JNr3V4TmeJYL6qEULC9FyjjEQBbQQ8Lx+h76gll2SW5vHY9FIr4leGIyTnMGqsYueweu7yUsd7HESY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639535; c=relaxed/simple; bh=7Hs92Ta+g+RGuRep3+Fi6JqFjV6J2RW9UQnWVkzSZhc=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=hUQASXjcYdXR4hF32afORUKrlvfLGFjd2ARIUp7TDE9XUvieROwnXKNYUkY3YMitNRCGWUUvAAInThaIk2eccrMxZsKRVPP+GgBqBJR76D3yfoAVD02b7ijpHn0HTCIcKpBtbv5AGbh3svroD8puve0IKoJ42Erlz8rje4dBlP4= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DE5494099CE8 Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104: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 5DF525BD44 for ; Fri, 1 May 2026 12:45:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=iGgkr/0+jMqN11XdvTVGAsjr2bWCJYIRw3rRwShuBd4=; b=ffFt40mrLeglt5OKItQm8bFixsMQnjt3h3POVgtQq9ODd4HXeuHKcZnnESqa+SUT+vM0R4 WpnPV6w9+UU7QwGrnqfhr6/lc4tsrAjqbWoL9ZYcDdSwiAuO0jUvWID1fkX01Des5Af79i ViGeStVwD8Dv307cb7+E2F0Hi4mOek8= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=iGgkr/0+jMqN11XdvTVGAsjr2bWCJYIRw3rRwShuBd4=; b=xtIwGYWFCxFjM/g1LYJTtrXl5VoJ1tAXvrHpyWt01JZesl+/mVXJHEhf2jT32MK8H4m3VT o0GM7v4L+wl/z4DA== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=ffFt40mr; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=xtIwGYWF DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=iGgkr/0+jMqN11XdvTVGAsjr2bWCJYIRw3rRwShuBd4=; b=ffFt40mrLeglt5OKItQm8bFixsMQnjt3h3POVgtQq9ODd4HXeuHKcZnnESqa+SUT+vM0R4 WpnPV6w9+UU7QwGrnqfhr6/lc4tsrAjqbWoL9ZYcDdSwiAuO0jUvWID1fkX01Des5Af79i ViGeStVwD8Dv307cb7+E2F0Hi4mOek8= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=iGgkr/0+jMqN11XdvTVGAsjr2bWCJYIRw3rRwShuBd4=; b=xtIwGYWFCxFjM/g1LYJTtrXl5VoJ1tAXvrHpyWt01JZesl+/mVXJHEhf2jT32MK8H4m3VT o0GM7v4L+wl/z4DA== 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 41EA5593B2 for ; Fri, 1 May 2026 12:45:06 +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 +NyyDlKg9Gn5ZwAAD6G6ig (envelope-from ) for ; Fri, 01 May 2026 12:45:06 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 05/10] [gdbsupport] Use using instead of typedef in next_iterator Date: Fri, 1 May 2026 14:44:59 +0200 Message-ID: <20260501124504.2233495-6-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260501124504.2233495-1-tdevries@suse.de> References: <20260501124504.2233495-1-tdevries@suse.de> MIME-Version: 1.0 X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[99.99%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; RCPT_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+]; FUZZY_RATELIMITED(0.00)[rspamd.com]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; FROM_HAS_DN(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,imap1.dmz-prg2.suse.org:rdns,suse.de:dkim,suse.de:mid]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_TLS_ALL(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:104:10:150:64:97:from]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; DKIM_TRACE(0.00)[suse.de:+] X-Rspamd-Action: no action X-Spam-Score: -3.01 X-Spam-Level: X-Rspamd-Server: rspamd1.dmz-prg2.suse.org X-Rspamd-Queue-Id: 5DF525BD44 X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org Use using instead of typedef in next_iterator. While we're at it, do the same in basic_safe_iterator. Suggested-By: Simon Marchi Co-Authored-By: Simon Marchi --- gdbsupport/next-iterator.h | 12 ++++++------ gdbsupport/safe-iterator.h | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/gdbsupport/next-iterator.h b/gdbsupport/next-iterator.h index 0c90428d349..9f0aba7f8c4 100644 --- a/gdbsupport/next-iterator.h +++ b/gdbsupport/next-iterator.h @@ -28,12 +28,12 @@ template struct next_iterator { - typedef next_iterator self_type; - typedef T *value_type; - typedef T *&reference; - typedef T **pointer; - typedef std::forward_iterator_tag iterator_category; - typedef int difference_type; + using self_type = next_iterator; + using value_type = T *; + using reference = T *&; + using pointer = T **; + using iterator_category = std::forward_iterator_tag; + using difference_type = int; explicit next_iterator (T *item) : m_item (item) diff --git a/gdbsupport/safe-iterator.h b/gdbsupport/safe-iterator.h index 3e5d1140179..6c5a2901c7e 100644 --- a/gdbsupport/safe-iterator.h +++ b/gdbsupport/safe-iterator.h @@ -43,12 +43,12 @@ template class basic_safe_iterator { public: - typedef basic_safe_iterator self_type; - typedef typename Iterator::value_type value_type; - typedef typename Iterator::reference reference; - typedef typename Iterator::pointer pointer; - typedef typename Iterator::iterator_category iterator_category; - typedef typename Iterator::difference_type difference_type; + using self_type = basic_safe_iterator; + using value_type = typename Iterator::value_type; + using reference = typename Iterator::reference; + using pointer = typename Iterator::pointer; + using iterator_category = typename Iterator::iterator_category; + using difference_type = typename Iterator::difference_type; /* Construct the iterator using the underlying iterator BEGIN; the end iterator is default constructed. */ From patchwork Fri May 1 12:45:00 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 134322 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id CD0384BA23FF for ; Fri, 1 May 2026 12:47:04 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CD0384BA23FF 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=bHkc4uYE; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=cVbFeXcH; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=bHkc4uYE; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=cVbFeXcH X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by sourceware.org (Postfix) with ESMTPS id 53E7E4099CDE for ; Fri, 1 May 2026 12:45:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 53E7E4099CDE 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 53E7E4099CDE Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639530; cv=none; b=I716IB3V6na8AO92329NF19CXaSMn3mVvlr3CzzihWf9d7OexzGPDJuWCyD2KlKNfKd36itxiTTNtk7xEpUuNM4Z113pVMw6TyS4LZU0/7wIb3Uhe6EF+qnoF5+ty0O/Nh2xRAah3B2IrUZ9I85W0Wmn+zC3c9AXrG/oIp3krT4= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639530; c=relaxed/simple; bh=IYaeTAyiiMHRGXSO8HN8xq5bQ5yBTpgkrlIghj8oWf8=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=hJ43eUrSguyg67/+tkW3EzAVezHaPa2Z3QuTbgzp5c6OTh04fQhsauEvNNEAk5u3zY13d81/282ZQRKDqN+OcX97hkR0nyRP0/ceAGY3yZmvi4eQxtsg8hkKSOZ+avsoxdQI+mLUETg6jGznv30ZvGos/MsejltXzY0eoX69+l0= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 53E7E4099CDE 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 785745BD6D for ; Fri, 1 May 2026 12:45:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=1GxVp7ACS61j9Nb0dw2thkWPr46UWHEAtlrXQJhE1ZE=; b=bHkc4uYEPbA8HdHjQrYWc4VsjBMj2W8B/P+X3RkpYN9o2s1oqZHX0Cd+dGgx3aB5QBDS/c THpgquLteqTHyW206CggVbPxZ/KqZopHtQdaFrTU/KLUA90nVJxMMe6x7dFqUHCYv+JR2d sZyhQcDWTAQArtXxnjpH/Ri26jehiuw= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=1GxVp7ACS61j9Nb0dw2thkWPr46UWHEAtlrXQJhE1ZE=; b=cVbFeXcHAZdm52B/f1WsjcYVKVxGoNM5xZP9kKRuUuh9DIik1GdYIxZU8JQoaVObqAQpHM i4fSlzTxA2HkTRDg== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=1GxVp7ACS61j9Nb0dw2thkWPr46UWHEAtlrXQJhE1ZE=; b=bHkc4uYEPbA8HdHjQrYWc4VsjBMj2W8B/P+X3RkpYN9o2s1oqZHX0Cd+dGgx3aB5QBDS/c THpgquLteqTHyW206CggVbPxZ/KqZopHtQdaFrTU/KLUA90nVJxMMe6x7dFqUHCYv+JR2d sZyhQcDWTAQArtXxnjpH/Ri26jehiuw= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=1GxVp7ACS61j9Nb0dw2thkWPr46UWHEAtlrXQJhE1ZE=; b=cVbFeXcHAZdm52B/f1WsjcYVKVxGoNM5xZP9kKRuUuh9DIik1GdYIxZU8JQoaVObqAQpHM i4fSlzTxA2HkTRDg== 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 610ED593B3 for ; Fri, 1 May 2026 12:45:06 +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 2GI2FlKg9Gn5ZwAAD6G6ig (envelope-from ) for ; Fri, 01 May 2026 12:45:06 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 06/10] [gdbsupport] Factor out base_next_iterator Date: Fri, 1 May 2026 14:45:00 +0200 Message-ID: <20260501124504.2233495-7-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260501124504.2233495-1-tdevries@suse.de> References: <20260501124504.2233495-1-tdevries@suse.de> MIME-Version: 1.0 X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[99.99%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; FUZZY_RATELIMITED(0.00)[rspamd.com]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,suse.de:mid]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; RCVD_TLS_ALL(0.00)[] X-Spam-Score: -2.80 X-Spam-Level: X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org Template struct next_iterator allows iterating over the "next" field of T. I decided to generalize this to be able to use any field. A first thought was to use macros, but nowadays we try to do things more in native c++, so I didn't explore that further. Instead, this patch factors out base_next_iterator, which contains all parts not specific to "next", in other words, everything except the operator++. I also explored using a pointer-to-member template argument T::next: ... template struct next_iterator { ... self_type &operator++ () { m_item = m_item->*F; return *this; } ... } ... but that meant that using an incomplete T was no longer allowed (see test_next_iterator_incomplete_type), so it's not a drop-in replacement. --- gdbsupport/next-iterator.h | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/gdbsupport/next-iterator.h b/gdbsupport/next-iterator.h index 9f0aba7f8c4..feee2c2a7c7 100644 --- a/gdbsupport/next-iterator.h +++ b/gdbsupport/next-iterator.h @@ -21,27 +21,27 @@ #include "gdbsupport/iterator-range.h" -/* An iterator that uses the 'next' field of a type to iterate. This - can be used with various GDB types that are stored as linked - lists. */ +/* An iterator base class for iterating over a field of a type. In order to + form a functioning iterator, classes inheriting this should define a next + function, which determines the actual field that is iterated over. */ -template -struct next_iterator +template +struct base_next_iterator { - using self_type = next_iterator; + using self_type = base_next_iterator; using value_type = T *; using reference = T *&; using pointer = T **; using iterator_category = std::forward_iterator_tag; using difference_type = int; - explicit next_iterator (T *item) + explicit base_next_iterator (T *item) : m_item (item) { } /* Create a one-past-the-end iterator. */ - next_iterator () + base_next_iterator () : m_item (nullptr) { } @@ -63,15 +63,31 @@ struct next_iterator self_type &operator++ () { - m_item = m_item->next; + m_item = static_cast(this)->next (); return *this; } -private: +protected: T *m_item; }; +/* An iterator that uses the 'next' field of a type to iterate. This + can be used with various GDB types that are stored as linked + lists. Note that we're using CRTP here. */ + +template +struct next_iterator : base_next_iterator> +{ + using base_next_iterator>::base_next_iterator; + using base_next_iterator>::m_item; + + T *next () + { + return m_item->next; + } +}; + /* A convenience wrapper to make a range type around a next_iterator. */ template From patchwork Fri May 1 12:45:01 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 134326 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 8265F46A9CC2 for ; Fri, 1 May 2026 12:49:11 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 8265F46A9CC2 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=AUp0JM0i; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=MIeajNsN; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=AUp0JM0i; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=MIeajNsN X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by sourceware.org (Postfix) with ESMTPS id 739C446A9CC0 for ; Fri, 1 May 2026 12:45:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 739C446A9CC0 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 739C446A9CC0 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639545; cv=none; b=sDKMXCg7if5NA5UiT5JLEOjnHsf+7+hGFtPQUM7jCdjK2To5UYZdIIJDzwtICWmXTondrKfRGdysL4Mt0E13l01wq3AblEs5rOWr3RbOqCNko0TiHABTFELjrWOFRqTtWS6I1ocF7Tl1ETPE15cL5QOvJViFAEcy1EBHv7/QBkY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639545; c=relaxed/simple; bh=bfYqGqlVUKyUTsvGgJ2GIoyjZC3OX1sTsRevQq6sEgo=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=rVXXF3RUM0yyv/88E+wvog8Hjf5UPYj4EFZnz2npHNZFE6AKFuE+GxYOHI5s0tBKoh9Z9acU/7020pOOM4pddtzq0moJodKixcRXnn/lA8RTGpfazHwH+sIw32dNU5fLzBQVzxYmRT117YGEOS1b0sZvSVTOQwE+Diz8xK7ztps= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 739C446A9CC0 Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104: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 9A5375BD6E for ; Fri, 1 May 2026 12:45:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=+vvhJ711I/trrX1k/+Qo6jNLf97EZzLkoNhWqFBOZLQ=; b=AUp0JM0iT9XlQi+IZfOdyy22Fnnu+xricKfWbTn0mwrATgPazPOJlaQ7T3n+nspKP3Lrl+ ftlubxkJyEM8/LgXpyrTARMTfcT2zl8yzlLvZlpejLQRaqwAj1yo77gmgajbsz36MObohT t/wmGScp/oxUUAMVfV/6PS+HVtdNko4= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=+vvhJ711I/trrX1k/+Qo6jNLf97EZzLkoNhWqFBOZLQ=; b=MIeajNsNAP24xuQR/r9bhR9HeIqq/6GyHbuzWrwZwDWA09AAHxa2bZrXqxDHseISsuqa/G gf1WFiY0njWc8xDQ== Authentication-Results: smtp-out2.suse.de; dkim=pass header.d=suse.de header.s=susede2_rsa header.b=AUp0JM0i; dkim=pass header.d=suse.de header.s=susede2_ed25519 header.b=MIeajNsN DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=+vvhJ711I/trrX1k/+Qo6jNLf97EZzLkoNhWqFBOZLQ=; b=AUp0JM0iT9XlQi+IZfOdyy22Fnnu+xricKfWbTn0mwrATgPazPOJlaQ7T3n+nspKP3Lrl+ ftlubxkJyEM8/LgXpyrTARMTfcT2zl8yzlLvZlpejLQRaqwAj1yo77gmgajbsz36MObohT t/wmGScp/oxUUAMVfV/6PS+HVtdNko4= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=+vvhJ711I/trrX1k/+Qo6jNLf97EZzLkoNhWqFBOZLQ=; b=MIeajNsNAP24xuQR/r9bhR9HeIqq/6GyHbuzWrwZwDWA09AAHxa2bZrXqxDHseISsuqa/G gf1WFiY0njWc8xDQ== 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 837E9593B0 for ; Fri, 1 May 2026 12:45:06 +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 qC0lHlKg9Gn5ZwAAD6G6ig (envelope-from ) for ; Fri, 01 May 2026 12:45:06 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 07/10] [gdb] Add block::block_and_superblocks Date: Fri, 1 May 2026 14:45:01 +0200 Message-ID: <20260501124504.2233495-8-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260501124504.2233495-1-tdevries@suse.de> References: <20260501124504.2233495-1-tdevries@suse.de> MIME-Version: 1.0 X-Rspamd-Action: no action X-Rspamd-Server: rspamd2.dmz-prg2.suse.org X-Spamd-Result: default: False [-3.01 / 50.00]; BAYES_HAM(-3.00)[99.99%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; R_DKIM_ALLOW(-0.20)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; MX_GOOD(-0.01)[]; ARC_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; RCPT_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+]; FUZZY_RATELIMITED(0.00)[rspamd.com]; SPAMHAUS_XBL(0.00)[2a07:de40:b281:104:10:150:64:97:from]; FROM_HAS_DN(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:dkim,suse.de:mid,imap1.dmz-prg2.suse.org:helo,imap1.dmz-prg2.suse.org:rdns]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; RCVD_TLS_ALL(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; DNSWL_BLOCKED(0.00)[2a07:de40:b281:104:10:150:64:97:from]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; DKIM_TRACE(0.00)[suse.de:+] X-Rspamd-Queue-Id: 9A5375BD6E X-Spam-Score: -3.01 X-Spam-Level: X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org Add a function block::block_and_superblocks that can be used to transform: ... while (block != NULL) { ... block = block->superblock (); } ... into: ... for (auto b : block::block_and_superblocks (block)) { ... } ... --- gdb/block.h | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/gdb/block.h b/gdb/block.h index b70b27f6509..ff5203ae4c6 100644 --- a/gdb/block.h +++ b/gdb/block.h @@ -108,6 +108,27 @@ struct blockranges struct block : public allocate_on_obstack { + /* Variant of next_iterator using the superblock field instead of next. */ + struct superblock_iterator + : base_next_iterator + { + typedef superblock_iterator self_type; + + explicit superblock_iterator (value_type item) + : base_next_iterator (item) + { + } + + superblock_iterator () = default; + + value_type next () + { + return m_item->superblock (); + } + }; + + using superblock_range = iterator_range; + /* Return this block's start address. */ CORE_ADDR start () const { return m_start; } @@ -311,6 +332,26 @@ struct block : public allocate_on_obstack struct dynamic_prop *static_link () const; + /* Return a range adapter that iterates over this block and its + superblocks. */ + + superblock_range block_and_superblocks () const + { + superblock_range::iterator begin (this); + + return superblock_range (std::move (begin)); + } + + /* Return a range adapter that iterates over B and its superblocks. */ + + static superblock_range block_and_superblocks (const block *b) + { + if (b == nullptr) + return superblock_range (); + + return b->block_and_superblocks (); + } + /* Return true if block A is lexically nested within this block, or if A and this block have the same pc range. Return false otherwise. If ALLOW_NESTED is true, then block A is considered From patchwork Fri May 1 12:45:02 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 134325 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id 611E346A9CF6 for ; Fri, 1 May 2026 12:48:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 611E346A9CF6 Authentication-Results: sourceware.org; dkim=fail reason="signature verification failed" (1024-bit key, unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=rSrzP575; dkim=fail reason="signature verification failed" header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=tReRvU0l; dkim=fail reason="signature verification failed" (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=rSrzP575; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=tReRvU0l X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org 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 DEA384A9A89F for ; Fri, 1 May 2026 12:45:50 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DEA384A9A89F 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 DEA384A9A89F Authentication-Results: server2.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=1777639551; cv=none; b=LcJ8UTYTNUjFihLWIVcTezydoDv27TCbuPjDetoGAV/isv7j8VRSVJrFoCjsioZYr2HDdKsQ90Ksi9gKkat+sxWkLJ8gWYFbfE5wm54Dvwa12Ub6EtL+E9lpItzBBAmwAuhUWDSMhwFwslC1UVrn0qZIgTKGVCDFQ0c3XhcxsnY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639551; c=relaxed/simple; bh=naK7SbCVhEwIGeCl1FrpHt6I+rTkNquzVI6H/Mv+b8k=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=wrCRbX70KPNFBpyU9AknOj6VJEFMKNhIWWK4hwlf9X1zrvkIqlrrhKpSkbwzxvvbfEU3ydrieDau/l4o+636B0fgbhsQuy79v3zhjdjEh539833LJj2Hha744wJRcDOpjrUkzjlGjXYnguXH1vyFidcLpwu9f2yvAsyprsFxVHE= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org DEA384A9A89F 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 C1A855BD70 for ; Fri, 1 May 2026 12:45:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=R26ZoB5OhEKXg3vGWcFIeTXlVj5uxnUyvUdQkGrQH7M=; b=rSrzP575xn1LCtKwwyMUmkMDsytxz9e3JqEdSGEqUhWEzzyutZ/l/DjzzbmKk6fD6gM2mV BkfvvQ/ECZIgvnkWl4TGCJJErOG8+uGyDLgbAUcngie0DSSgWX0MYYGXWLuIGomtbwlcDk +Ew/cbfSt/+H6d7RvCknYJUQiStwNNM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=R26ZoB5OhEKXg3vGWcFIeTXlVj5uxnUyvUdQkGrQH7M=; b=tReRvU0ljVdb7QNSSccG/PnGomIGmsdStTuexH19suBBKIcVhJYU0A1K4BU0QwONmpqdIq 9qPu+Z8GFlV1aKCA== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=R26ZoB5OhEKXg3vGWcFIeTXlVj5uxnUyvUdQkGrQH7M=; b=rSrzP575xn1LCtKwwyMUmkMDsytxz9e3JqEdSGEqUhWEzzyutZ/l/DjzzbmKk6fD6gM2mV BkfvvQ/ECZIgvnkWl4TGCJJErOG8+uGyDLgbAUcngie0DSSgWX0MYYGXWLuIGomtbwlcDk +Ew/cbfSt/+H6d7RvCknYJUQiStwNNM= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=R26ZoB5OhEKXg3vGWcFIeTXlVj5uxnUyvUdQkGrQH7M=; b=tReRvU0ljVdb7QNSSccG/PnGomIGmsdStTuexH19suBBKIcVhJYU0A1K4BU0QwONmpqdIq 9qPu+Z8GFlV1aKCA== 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 A768B593B1 for ; Fri, 1 May 2026 12:45:06 +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 kDnEJlKg9Gn5ZwAAD6G6ig (envelope-from ) for ; Fri, 01 May 2026 12:45:06 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 08/10] [gdb] Use block::block_and_superblocks Date: Fri, 1 May 2026 14:45:02 +0200 Message-ID: <20260501124504.2233495-9-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260501124504.2233495-1-tdevries@suse.de> References: <20260501124504.2233495-1-tdevries@suse.de> MIME-Version: 1.0 X-Spam-Score: -2.80 X-Spam-Level: X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; FUZZY_RATELIMITED(0.00)[rspamd.com]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,suse.de:mid]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; RCVD_TLS_ALL(0.00)[] X-Spam-Status: No, score=-10.2 required=5.0 tests=BAYES_00, DKIM_INVALID, DKIM_SIGNED, GIT_PATCH_0, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org Add uses of block::block_and_superblocks. --- gdb/ada-lang.c | 18 ++++------ gdb/blockframe.c | 11 +++--- gdb/compile/compile-object-load.c | 8 +++-- gdb/cp-namespace.c | 6 ++-- gdb/cp-support.c | 8 ++--- gdb/d-namespace.c | 6 ++-- gdb/dwarf2/line-program.c | 24 +++++-------- gdb/infrun.c | 10 +++--- gdb/inline-frame.c | 45 +++++++++++------------- gdb/linespec.c | 7 ++-- gdb/symmisc.c | 9 +++-- gdb/symtab.c | 58 ++++++++++++++++++------------- 12 files changed, 101 insertions(+), 109 deletions(-) diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 71a338ce17e..6eb928b445d 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -5402,17 +5402,15 @@ ada_add_local_symbols (std::vector &result, const lookup_name_info &lookup_name, const struct block *block, domain_search_flags domain) { - while (block != NULL) + for (auto b : block::block_and_superblocks (block)) { - ada_add_block_symbols (result, block, lookup_name, domain, NULL); + ada_add_block_symbols (result, b, lookup_name, domain, nullptr); /* If we found a non-function match, assume that's the one. We only check this when finding a function boundary, so that we can accumulate all results from intervening blocks first. */ - if (block->function () != nullptr && is_nonfunction (result)) + if (b->function () != nullptr && is_nonfunction (result)) return; - - block = block->superblock (); } } @@ -13825,9 +13823,7 @@ class ada_language : public language_defn /* Search upwards from currently selected frame (so that we can complete on local vars. */ - for (const block *b = get_selected_block (0); - b != nullptr; - b = b->superblock ()) + for (auto b : block::block_and_superblocks (get_selected_block (0))) { if (b->is_static_block ()) surrounding_static_block = b; /* For elmin of dups */ @@ -13852,9 +13848,9 @@ class ada_language : public language_defn auto callback = [&] (compunit_symtab *s) { QUIT; - for (const block *b = s->blockvector ()->static_block (); - b != nullptr; - b = b->superblock ()) + const struct block *static_block + = s->blockvector ()->static_block (); + for (auto b : block::block_and_superblocks (static_block)) { /* Don't do this block twice. */ if (b == surrounding_static_block) diff --git a/gdb/blockframe.c b/gdb/blockframe.c index 8aafa6ffe57..5c981748cbc 100644 --- a/gdb/blockframe.c +++ b/gdb/blockframe.c @@ -69,13 +69,14 @@ get_frame_block (const frame_info_ptr &frame, CORE_ADDR *addr_in_block) inline_count = frame_inlined_callees (frame); - while (inline_count > 0) + auto range = bl->block_and_superblocks (); + for (auto b = range.begin (); b != range.end (); ++b, bl = *b) { - if (bl->inlined_p ()) - inline_count--; + if (inline_count <= 0) + break; - bl = bl->superblock (); - gdb_assert (bl != NULL); + if ((*b)->inlined_p ()) + inline_count--; } return bl; diff --git a/gdb/compile/compile-object-load.c b/gdb/compile/compile-object-load.c index 4ea924582fb..32c6fe0bacf 100644 --- a/gdb/compile/compile-object-load.c +++ b/gdb/compile/compile-object-load.c @@ -443,10 +443,12 @@ get_out_value_type (struct symbol *func_sym, struct objfile *objfile, continue; function_block = block; - while (function_block != bv->static_block () - && function_block != bv->global_block ()) + for (auto b : block::block_and_superblocks (block)) { - function_block = function_block->superblock (); + if (b == bv->static_block () || b == bv->global_block ()) + break; + + function_block = b->superblock (); function = function_block->function (); if (function != NULL) break; diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c index c8cd5c245aa..534f2d0b8f9 100644 --- a/gdb/cp-namespace.c +++ b/gdb/cp-namespace.c @@ -613,13 +613,11 @@ cp_lookup_symbol_via_all_imports (const char *scope, const char *name, { struct block_symbol sym; - while (block != NULL) + for (auto b : block::block_and_superblocks (block)) { - sym = cp_lookup_symbol_via_imports (scope, name, block, domain, 0, 1); + sym = cp_lookup_symbol_via_imports (scope, name, b, domain, 0, 1); if (sym.symbol != nullptr) return sym; - - block = block->superblock (); } return {}; diff --git a/gdb/cp-support.c b/gdb/cp-support.c index d040ad79469..c04a5120380 100644 --- a/gdb/cp-support.c +++ b/gdb/cp-support.c @@ -1408,15 +1408,11 @@ add_symbol_overload_list_using (const char *func_name, const char *the_namespace, std::vector *overload_list) { - const struct block *block; - /* First, go through the using directives. If any of them apply, look in the appropriate namespaces for new functions to match on. */ - for (block = get_selected_block (0); - block != NULL; - block = block->superblock ()) + for (auto block : block::block_and_superblocks (get_selected_block (0))) for (using_direct *current : block->get_using ()) { /* Prevent recursive calls. */ @@ -1459,7 +1455,7 @@ add_symbol_overload_list_qualified (const char *func_name, /* Search upwards from currently selected frame (so that we can complete on local vars. */ - for (const block *b = selected_block; b != nullptr; b = b->superblock ()) + for (auto b : block::block_and_superblocks (selected_block)) add_symbol_overload_list_block (func_name, b, overload_list); const block *surrounding_static_block = (selected_block == nullptr diff --git a/gdb/d-namespace.c b/gdb/d-namespace.c index 34b90c0ed93..a8bb90320c3 100644 --- a/gdb/d-namespace.c +++ b/gdb/d-namespace.c @@ -481,14 +481,12 @@ d_lookup_symbol_module (const char *scope, const char *name, /* Search for name in modules imported to this and parent blocks. */ - while (block != NULL) + for (auto b : block::block_and_superblocks (block)) { - sym = d_lookup_symbol_imports (scope, name, block, domain); + sym = d_lookup_symbol_imports (scope, name, b, domain); if (sym.symbol != NULL) return sym; - - block = block->superblock (); } return {}; diff --git a/gdb/dwarf2/line-program.c b/gdb/dwarf2/line-program.c index b9da1b4799f..227ec01aec9 100644 --- a/gdb/dwarf2/line-program.c +++ b/gdb/dwarf2/line-program.c @@ -373,21 +373,15 @@ dwarf_find_and_extend_inline_block_range (dwarf2_cu *cu, the child of a non-inline block. This is new inline block is our candidate for extending. */ struct block *block = nullptr; - for (const struct block *b = it->second; - b != nullptr; - b = b->superblock ()) - { - if (b->function () != nullptr && b->inlined_p ()) - { - if (b->superblock () != nullptr - && b->superblock ()->function () != nullptr - && !b->superblock ()->inlined_p ()) - { - block = const_cast (b); - break; - } - } - } + for (auto b : block::block_and_superblocks (it->second)) + if (b->inlined_p () + && b->superblock () != nullptr + && b->superblock ()->function () != nullptr + && !b->superblock ()->inlined_p ()) + { + block = const_cast (b); + break; + } /* If we didn't find a block, or the block we found wasn't called from the expected LINE, then we're done. Maybe we should try harder to diff --git a/gdb/infrun.c b/gdb/infrun.c index 11c5d5214d6..be57c521a0d 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -8261,13 +8261,15 @@ process_event_stop_test (struct execution_control_state *ecs) const struct block *prev = block_for_pc (ecs->event_thread->control.step_frame_id.code_addr); const struct block *curr = block_for_pc (ecs->event_thread->stop_pc ()); - while (curr != nullptr && !curr->contains (prev)) + for (auto b : block::block_and_superblocks (curr)) { - if (curr->inlined_p ()) + if (b->contains (prev)) + break; + + if (b->inlined_p ()) depth++; - else if (curr->function () != nullptr) + else if (b->function () != nullptr) break; - curr = curr->superblock (); } while (inline_skipped_frames (ecs->event_thread) > depth) step_into_inline_frame (ecs->event_thread); diff --git a/gdb/inline-frame.c b/gdb/inline-frame.c index a1ccd4ed0da..3aeaebffa2d 100644 --- a/gdb/inline-frame.c +++ b/gdb/inline-frame.c @@ -217,7 +217,7 @@ inline_frame_sniffer (const struct frame_unwind *self, void **this_cache) { CORE_ADDR this_pc; - const struct block *frame_block, *cur_block; + const struct block *frame_block; int depth; frame_info_ptr next_frame; struct inline_state *state = find_inline_frame_state (inferior_thread ()); @@ -230,15 +230,15 @@ inline_frame_sniffer (const struct frame_unwind *self, /* Calculate DEPTH, the number of inlined functions at this location. */ depth = 0; - cur_block = frame_block; - while (cur_block->superblock ()) + for (auto cur_block : frame_block->block_and_superblocks ()) { + if (cur_block->superblock () == nullptr) + break; + if (cur_block->inlined_p ()) depth++; else if (cur_block->function () != NULL) break; - - cur_block = cur_block->superblock (); } /* Check how many inlined functions already have frames. */ @@ -361,25 +361,22 @@ gather_inline_frames (CORE_ADDR this_pc) return {}; std::vector function_symbols; - while (cur_block != nullptr) - { - if (cur_block->inlined_p ()) - { - gdb_assert (cur_block->function () != nullptr); - - /* See comments in inline_frame_this_id about this use - of BLOCK_ENTRY_PC. */ - if (cur_block->entry_pc () == this_pc - || block_starting_point_at (bv, this_pc, cur_block)) - function_symbols.push_back (cur_block->function ()); - else - break; - } - else if (cur_block->function () != nullptr) - break; - - cur_block = cur_block->superblock (); - } + auto range = block::block_and_superblocks (cur_block); + for (auto b = range.begin (); b != range.end (); ++b, cur_block = *b) + if (cur_block->inlined_p ()) + { + gdb_assert (cur_block->function () != nullptr); + + /* See comments in inline_frame_this_id about this use + of BLOCK_ENTRY_PC. */ + if (cur_block->entry_pc () == this_pc + || block_starting_point_at (bv, this_pc, cur_block)) + function_symbols.push_back (cur_block->function ()); + else + break; + } + else if (cur_block->function () != nullptr) + break; /* If we have a code region for which we have no function blocks, possibly due to bad debug, or possibly just when some debug diff --git a/gdb/linespec.c b/gdb/linespec.c index 6ed4b4553d3..c393e855a91 100644 --- a/gdb/linespec.c +++ b/gdb/linespec.c @@ -1194,11 +1194,10 @@ iterate_over_file_blocks domain_search_flags domain, for_each_symbol_callback_ftype callback) { - const struct block *block; + const struct block *static_block + = symtab->compunit ()->blockvector ()->static_block (); - for (block = symtab->compunit ()->blockvector ()->static_block (); - block != NULL; - block = block->superblock ()) + for (auto block : block::block_and_superblocks (static_block)) current_language->for_each_symbol (block, name, domain, callback); } diff --git a/gdb/symmisc.c b/gdb/symmisc.c index 89374bd8a2f..f882f3add17 100644 --- a/gdb/symmisc.c +++ b/gdb/symmisc.c @@ -961,11 +961,10 @@ block_depth (const struct block *block) { int i = 0; - while ((block = block->superblock ()) != NULL) - { - i++; - } - return i; + for (auto b [[maybe_unused]]: block::block_and_superblocks (block)) + i++; + + return i - 1; } diff --git a/gdb/symtab.c b/gdb/symtab.c index 3c10e1fd750..d8e4e6375d9 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -2181,14 +2181,17 @@ lookup_local_symbol (const char *name, const char *scope = block->scope (); - while (!block->is_global_block () && !block->is_static_block ()) + for (auto b : block->block_and_superblocks ()) { + if (b->is_global_block () || b->is_static_block ()) + break; + struct symbol *sym = lookup_symbol_in_block (name, match_type, - block, domain); + b, domain); if (sym != NULL) - return (struct block_symbol) {sym, block}; + return (struct block_symbol) {sym, b}; - struct symbol *function = block->function (); + struct symbol *function = b->function (); if (function != nullptr && function->is_template_function ()) { struct template_symbol *templ = (struct template_symbol *) function; @@ -2196,17 +2199,16 @@ lookup_local_symbol (const char *name, templ->n_template_arguments, templ->template_arguments); if (sym != nullptr) - return (struct block_symbol) {sym, block}; + return (struct block_symbol) {sym, b}; } struct block_symbol blocksym - = langdef->lookup_symbol_local (scope, name, block, domain); + = langdef->lookup_symbol_local (scope, name, b, domain); if (blocksym.symbol != nullptr) return blocksym; - if (block->inlined_p ()) + if (b->inlined_p ()) break; - block = block->superblock (); } /* We've reached the end of the function without finding a result. */ @@ -3829,13 +3831,17 @@ skip_prologue_sal (struct symtab_and_line *sal) use the call site of the function instead. */ const block *function_block = nullptr; - for (const block *b = block_for_pc_sect (sal->pc, sal->section); - b != nullptr; - b = b->superblock ()) - if (b->function () != NULL && b->inlined_p ()) - function_block = b; - else if (b->function () != NULL) - break; + const block *pc_block = block_for_pc_sect (sal->pc, sal->section); + for (auto b: block::block_and_superblocks (pc_block)) + { + if (b->function () == nullptr) + continue; + + if (b->inlined_p ()) + function_block = b; + else + break; + } if (function_block != NULL && function_block->function ()->line () != 0) @@ -3929,7 +3935,8 @@ skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr) same function, not something inlined. If it's inlined, then there is no point comparing the line numbers. */ bl = block_for_pc (prologue_sal.end); - while (bl) + auto range = block::block_and_superblocks (bl); + for (auto b = range.begin (); b != range.end (); ++b, bl = *b) { if (bl->inlined_p ()) break; @@ -3938,7 +3945,6 @@ skip_prologue_using_sal (struct gdbarch *gdbarch, CORE_ADDR func_addr) bl = NULL; break; } - bl = bl->superblock (); } if (bl != NULL) break; @@ -5868,7 +5874,7 @@ default_collect_symbol_completion_matches_break_on frees them. I'm not going to worry about this; hopefully there won't be that many. */ - const struct block *b; + const struct block *selected_block; const struct block *surrounding_static_block, *surrounding_global_block; /* The symbol we are completing on. Points in same buffer as text. */ const char *sym_text; @@ -5977,12 +5983,17 @@ default_collect_symbol_completion_matches_break_on this places which match our text string. Only complete on types visible from current context. */ - b = get_selected_block (0); - surrounding_static_block = b == nullptr ? nullptr : b->static_block (); - surrounding_global_block = b == nullptr ? nullptr : b->global_block (); + selected_block = get_selected_block (0); + surrounding_static_block + = selected_block == nullptr ? nullptr : selected_block->static_block (); + surrounding_global_block + = selected_block == nullptr ? nullptr : selected_block->global_block (); if (surrounding_static_block != NULL) - while (b != surrounding_static_block) + for (auto b : block::block_and_superblocks (selected_block)) { + if (b == surrounding_static_block) + break; + QUIT; for (struct symbol *sym : block_iterator_range (b)) @@ -6003,9 +6014,8 @@ default_collect_symbol_completion_matches_break_on /* Stop when we encounter an enclosing function. Do not stop for non-inlined functions - the locals of the enclosing function are in scope for a nested function. */ - if (b->function () != NULL && b->inlined_p ()) + if (b->inlined_p ()) break; - b = b->superblock (); } /* Add fields from the file's types; symbols will be added below. */ From patchwork Fri May 1 12:45:03 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 134320 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id E755E46A9CCE for ; Fri, 1 May 2026 12:46:41 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E755E46A9CCE 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=Ejd01ZTs; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=8ve20BPQ; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=Ejd01ZTs; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=8ve20BPQ X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org 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 E1DB846A9CE4 for ; Fri, 1 May 2026 12:45:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E1DB846A9CE4 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 E1DB846A9CE4 Authentication-Results: server2.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=1777639558; cv=none; b=eE/8OV/p7A8vY7JI3XuvZwOqoeacfF7H+JHlW0nDTbXBenEgoja1TXozKxEDAdGglUSyl4HgqWsiIHAharCV0aGdH7mg52PteRs/8SrjkB0jU7Wws1xA0ebQcRwxNVeaHCQceacPhJV99g+lON8xjVTpv32GDrU7KMK3o2a6NfI= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639558; c=relaxed/simple; bh=FmcRzGcecpQTOPCcDELA9uUBUSGv+GIvVJjDbbeZ1Y4=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=snGC9S+WLGzzgO+ul/FYNHVp7XY1LaMa2J4cpOu6u0Zbvws0QR4+oMatfjxCUQ4ItyjDDpv38QxybOHvrPCT2tLxUKo0hBqtniEFGCpr9EITsMEfOXZe/YClr1cgnhE77SpZvz/wEqjexKeja7htqULIKUC6gz3tuAJ4pClLIzk= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E1DB846A9CE4 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 E2A4B5BD72 for ; Fri, 1 May 2026 12:45:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=1C4mzazulZTMwFeqbPEnDgBgpmU4MvoHp4/97s9T0F0=; b=Ejd01ZTsAv3gDagsJkChirSf9AvbsBOTUTZ7TSHHYkZASab8IJeQ5QUFWMNDUoqrT4nzWs xmow5V15zZ8p8nHv+S8F0BFCxdA3o2Lb83Bh3neZVj8NFknosQ+pMbpCd3ntBYged0FaIv vXh5u97Ae1stHHG5RBhMrOw3C+7rA70= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=1C4mzazulZTMwFeqbPEnDgBgpmU4MvoHp4/97s9T0F0=; b=8ve20BPQpZb4EKt5Hivpz9OoACVPBvhvFkwMUCMKb+/+SRxqVl42RgM8hXqi9Se7hkc1ib zwrvBIog6h5L2BCg== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639506; 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=1C4mzazulZTMwFeqbPEnDgBgpmU4MvoHp4/97s9T0F0=; b=Ejd01ZTsAv3gDagsJkChirSf9AvbsBOTUTZ7TSHHYkZASab8IJeQ5QUFWMNDUoqrT4nzWs xmow5V15zZ8p8nHv+S8F0BFCxdA3o2Lb83Bh3neZVj8NFknosQ+pMbpCd3ntBYged0FaIv vXh5u97Ae1stHHG5RBhMrOw3C+7rA70= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639506; 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=1C4mzazulZTMwFeqbPEnDgBgpmU4MvoHp4/97s9T0F0=; b=8ve20BPQpZb4EKt5Hivpz9OoACVPBvhvFkwMUCMKb+/+SRxqVl42RgM8hXqi9Se7hkc1ib zwrvBIog6h5L2BCg== 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 C96B5593B0 for ; Fri, 1 May 2026 12:45:06 +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 CGatL1Kg9Gn5ZwAAD6G6ig (envelope-from ) for ; Fri, 01 May 2026 12:45:06 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 09/10] [gdb] Add block::block_and_superblocks_in_fn Date: Fri, 1 May 2026 14:45:03 +0200 Message-ID: <20260501124504.2233495-10-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260501124504.2233495-1-tdevries@suse.de> References: <20260501124504.2233495-1-tdevries@suse.de> MIME-Version: 1.0 X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[99.99%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; FUZZY_RATELIMITED(0.00)[rspamd.com]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; DBL_BLOCKED_OPENRESOLVER(0.00)[imap1.dmz-prg2.suse.org:helo,suse.de:mid]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; RCVD_TLS_ALL(0.00)[] X-Spam-Score: -2.80 X-Spam-Level: X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org Add a function block::block_and_superblocks_in_fn that can be used to transform: ... while (block != NULL) { ... if (block->function () != nullptr) break; block = block->superblock (); } ... into: ... for (auto b : block::block_and_superblocks_in_fn (block)) { ... } ... In fact the new loop is somewhat stricter, because it systematically ignores the static and global blocks. This means that the transformation is not strictly semantics-preserving. I'm still on the fence about whether this is a good idea. My assumption here is that these loops are written assuming a well-formed block hierarchy: ... global block <- static block <- function block <- in-function block ... as well as assuming that the starting block is not the static or global block. And for such loops, the stricter static/global blocks skipping behavior doesn't matter. --- gdb/block.h | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/gdb/block.h b/gdb/block.h index ff5203ae4c6..c39425185aa 100644 --- a/gdb/block.h +++ b/gdb/block.h @@ -127,7 +127,42 @@ struct block : public allocate_on_obstack } }; + /* Variant of next_iterator using the superblock field instead of next. */ + struct function_block_iterator + : base_next_iterator + { + typedef function_block_iterator self_type; + + explicit function_block_iterator (value_type item) + : base_next_iterator (item->is_global_block () || item->is_static_block () + ? nullptr : item) + { + } + + function_block_iterator () = default; + + value_type next () + { + if (m_item->function () != nullptr) + return nullptr; + + value_type next = m_item->superblock (); + if (next->is_global_block () || next->is_static_block ()) + { + /* This shouldn't be reachable in well-formed block hierarchies, given + that we avoid global and static block in the constructor, and + stop iterating when encountering a function. But let's try to be + robust and ensure that this iterator never points to a static or + global block. */ + return nullptr; + } + + return next; + } + }; + using superblock_range = iterator_range; + using function_block_range = iterator_range; /* Return this block's start address. */ CORE_ADDR start () const @@ -352,6 +387,27 @@ struct block : public allocate_on_obstack return b->block_and_superblocks (); } + /* Return a range adapter that iterates over this block and its + superblocks in the same function. */ + + function_block_range block_and_superblocks_in_fn () const + { + function_block_range::iterator begin (this); + + return function_block_range (std::move (begin)); + } + + /* Return a range adapter that iterates over B and its superblocks in the + same function. */ + + static function_block_range block_and_superblocks_in_fn (const block *b) + { + if (b == nullptr) + return function_block_range (); + + return b->block_and_superblocks_in_fn (); + } + /* Return true if block A is lexically nested within this block, or if A and this block have the same pc range. Return false otherwise. If ALLOW_NESTED is true, then block A is considered From patchwork Fri May 1 12:45:04 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom de Vries X-Patchwork-Id: 134328 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id D3BC446A9CC7 for ; Fri, 1 May 2026 12:49:47 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D3BC446A9CC7 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=ymPNa3JB; dkim=pass header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=C7rOyV9D; dkim=pass (1024-bit key) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=ymPNa3JB; dkim=neutral header.d=suse.de header.i=@suse.de header.a=ed25519-sha256 header.s=susede2_ed25519 header.b=C7rOyV9D X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by sourceware.org (Postfix) with ESMTPS id EB5B546A9CE1 for ; Fri, 1 May 2026 12:46:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org EB5B546A9CE1 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 EB5B546A9CE1 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=195.135.223.131 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639563; cv=none; b=GukZVwSaOqBXGtSoSO4ik/cD3d2bRUBtAVVa8FDoLHmYj6Ucg3hBQoDeWkxOdppppTx4bztennhxiDoe5kwEXL3qlvo8xlJEc9Cpu16bA600Vsr3xycwXAhkyECGBUKzbHqeetPG5GbDC1r4vSkvZ5LC+9NOgSNf8fyLBnk7JL8= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777639563; c=relaxed/simple; bh=xxm98KGHHL68Yn/ylxrZmKMvEV7UI4ujxnBXYNYeOko=; h=DKIM-Signature:DKIM-Signature:DKIM-Signature:DKIM-Signature:From: To:Subject:Date:Message-ID:MIME-Version; b=KB2j4kWVi9BEAvNR69NmQ9aJtHE586uoE2HIop8fVo2elWYlrtjtbVvF4yUdEZim+1puvJpAI8DEdFXgkOPmhf/4hmjaE1moEzsIX+otodeUQN2wxkqLNWs8dJmy8u+m4q/VClF6MJ3UNwNhSlyEF1wa2rRhToQiSeM/myJuDAc= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EB5B546A9CE1 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 17D875BD74 for ; Fri, 1 May 2026 12:45:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639507; 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=GLI5LfWORW0gWl0HttOQucDhhwl61lpL6dDy/4nP2jg=; b=ymPNa3JBA7RFm+VNKGrkrEaY9AqGrrcncG/cB8rCUV8B+2L6iuGa7jQ0a+QxORB1MrASEJ 5idQ7SnbPMC2v2bHM1DW0Vnjs+wCQNpQ5TqRXubw1SSqo1It8blrhDZFPJS8O5FOr0ekDg O+rrlFrcPb7OiIA3J3nRBn6Imk5B4Jo= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639507; 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=GLI5LfWORW0gWl0HttOQucDhhwl61lpL6dDy/4nP2jg=; b=C7rOyV9DZUhlgO6+SZjhXHWYX5YIzKkAXz/iYRs/U6kk27sqeh7ZS+vrjqbl3JfIsqSB9O DCyiwj9IUJh5ktBQ== Authentication-Results: smtp-out2.suse.de; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1777639507; 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=GLI5LfWORW0gWl0HttOQucDhhwl61lpL6dDy/4nP2jg=; b=ymPNa3JBA7RFm+VNKGrkrEaY9AqGrrcncG/cB8rCUV8B+2L6iuGa7jQ0a+QxORB1MrASEJ 5idQ7SnbPMC2v2bHM1DW0Vnjs+wCQNpQ5TqRXubw1SSqo1It8blrhDZFPJS8O5FOr0ekDg O+rrlFrcPb7OiIA3J3nRBn6Imk5B4Jo= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1777639507; 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=GLI5LfWORW0gWl0HttOQucDhhwl61lpL6dDy/4nP2jg=; b=C7rOyV9DZUhlgO6+SZjhXHWYX5YIzKkAXz/iYRs/U6kk27sqeh7ZS+vrjqbl3JfIsqSB9O DCyiwj9IUJh5ktBQ== 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 EE54E593B1 for ; Fri, 1 May 2026 12:45:06 +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 KJm6OFKg9Gn5ZwAAD6G6ig (envelope-from ) for ; Fri, 01 May 2026 12:45:06 +0000 From: Tom de Vries To: gdb-patches@sourceware.org Subject: [PATCH 10/10] [gdb] Use block::block_and_superblocks_in_fn Date: Fri, 1 May 2026 14:45:04 +0200 Message-ID: <20260501124504.2233495-11-tdevries@suse.de> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260501124504.2233495-1-tdevries@suse.de> References: <20260501124504.2233495-1-tdevries@suse.de> MIME-Version: 1.0 X-Spam-Score: -2.80 X-Spam-Level: X-Spamd-Result: default: False [-2.80 / 50.00]; BAYES_HAM(-3.00)[100.00%]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_CONTAINS_FROM(1.00)[]; R_MISSING_CHARSET(0.50)[]; NEURAL_HAM_SHORT(-0.20)[-1.000]; MIME_GOOD(-0.10)[text/plain]; FUZZY_RATELIMITED(0.00)[rspamd.com]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; DKIM_SIGNED(0.00)[suse.de:s=susede2_rsa,suse.de:s=susede2_ed25519]; DBL_BLOCKED_OPENRESOLVER(0.00)[suse.de:mid,imap1.dmz-prg2.suse.org:helo]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_TWO(0.00)[2]; TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[gdb-patches@sourceware.org]; RCVD_TLS_ALL(0.00)[] X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on sourceware.org 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~patchwork=sourceware.org@sourceware.org Add uses of block::block_and_superblocks_in_fn. --- gdb/ada-lang.c | 43 ++++----- gdb/compile/compile-c-symbols.c | 10 +-- gdb/f-valprint.c | 19 ++-- gdb/mi/mi-cmd-stack.c | 155 +++++++++++++++----------------- gdb/python/py-unwind.c | 2 +- gdb/stack.c | 15 ++-- gdb/symtab.c | 11 +-- gdb/tracepoint.c | 9 +- 8 files changed, 114 insertions(+), 150 deletions(-) diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 6eb928b445d..400760be1ba 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -13118,32 +13118,27 @@ ada_add_exceptions_from_frame (compiled_regex *preg, const frame_info_ptr &frame, std::vector *exceptions) { - const struct block *block = get_frame_block (frame, 0); + const struct block *frame_block = get_frame_block (frame, 0); - while (block != 0) - { - for (struct symbol *sym : block_iterator_range (block)) - { - switch (sym->loc_class ()) - { - case LOC_TYPEDEF: - case LOC_BLOCK: - case LOC_CONST: - break; - default: - if (ada_is_exception_sym (sym)) - { - struct ada_exc_info info = {sym->print_name (), - sym->value_address ()}; + for (auto block : block::block_and_superblocks_in_fn (frame_block)) + for (struct symbol *sym : block_iterator_range (block)) + { + switch (sym->loc_class ()) + { + case LOC_TYPEDEF: + case LOC_BLOCK: + case LOC_CONST: + break; + default: + if (ada_is_exception_sym (sym)) + { + struct ada_exc_info info = {sym->print_name (), + sym->value_address ()}; - exceptions->push_back (info); - } - } - } - if (block->function () != NULL) - break; - block = block->superblock (); - } + exceptions->push_back (info); + } + } + } } /* Add all exceptions defined globally whose name name match diff --git a/gdb/compile/compile-c-symbols.c b/gdb/compile/compile-c-symbols.c index dc0487d8f82..da8c6719fe5 100644 --- a/gdb/compile/compile-c-symbols.c +++ b/gdb/compile/compile-c-symbols.c @@ -588,20 +588,14 @@ generate_c_for_variable_locations (compile_instance *compiler, reality of shadowing. */ gdb::unordered_set symset; - while (1) + for (auto b : block->block_and_superblocks_in_fn ()) { /* Iterate over symbols in this block, generating code to compute the location of each local variable. */ - for (struct symbol *sym : block_iterator_range (block)) + for (struct symbol *sym : block_iterator_range (b)) if (symset.insert (sym->natural_name ()).second) generate_c_for_for_one_variable (compiler, stream, gdbarch, registers_used, pc, sym); - - /* If we just finished the outermost block of a function, we're - done. */ - if (block->function () != NULL) - break; - block = block->superblock (); } return registers_used; diff --git a/gdb/f-valprint.c b/gdb/f-valprint.c index 13921c03a48..44b24d788d3 100644 --- a/gdb/f-valprint.c +++ b/gdb/f-valprint.c @@ -682,7 +682,7 @@ static void info_common_command (const char *comname, int from_tty) { frame_info_ptr fi; - const struct block *block; + const struct block *frame_block; int values_printed = 0; /* We have been told to display the contents of F77 COMMON @@ -695,22 +695,17 @@ info_common_command (const char *comname, int from_tty) /* The following is generally ripped off from stack.c's routine print_frame_info(). */ - block = get_frame_block (fi, 0); - if (block == NULL) + frame_block = get_frame_block (fi, 0); + if (frame_block == nullptr) { gdb_printf (_("No symbol table info available.\n")); return; } - while (block) - { - info_common_command_for_block (block, comname, &values_printed); - /* After handling the function's top-level block, stop. Don't - continue to its superblock, the block of per-file symbols. */ - if (block->function ()) - break; - block = block->superblock (); - } + /* After handling the function's top-level block, stop. Don't + continue to its superblock, the block of per-file symbols. */ + for (auto block : block::block_and_superblocks_in_fn (frame_block)) + info_common_command_for_block (block, comname, &values_printed); if (!values_printed) { diff --git a/gdb/mi/mi-cmd-stack.c b/gdb/mi/mi-cmd-stack.c index f2a4b3044b0..0f46033c9b4 100644 --- a/gdb/mi/mi-cmd-stack.c +++ b/gdb/mi/mi-cmd-stack.c @@ -573,11 +573,11 @@ list_args_or_locals (const frame_print_options &fp_opts, enum what_to_list what, enum print_values values, const frame_info_ptr &fi, int skip_unavailable) { - const struct block *block; + const struct block *frame_block; const char *name_of_result; struct ui_out *uiout = current_uiout; - block = get_frame_block (fi, 0); + frame_block = get_frame_block (fi, 0); switch (what) { @@ -596,88 +596,81 @@ list_args_or_locals (const frame_print_options &fp_opts, ui_out_emit_list list_emitter (uiout, name_of_result); - while (block != 0) - { - for (struct symbol *sym : block_iterator_range (block)) - { - int print_me = 0; - - switch (sym->loc_class ()) - { - default: - case LOC_UNDEF: /* catches errors */ - case LOC_CONST: /* constant */ - case LOC_TYPEDEF: /* local typedef */ - case LOC_LABEL: /* local label */ - case LOC_BLOCK: /* local function */ - case LOC_CONST_BYTES: /* loc. byte seq. */ - case LOC_UNRESOLVED: /* unresolved static */ - case LOC_OPTIMIZED_OUT: /* optimized out */ - print_me = 0; - break; + for (auto block : block::block_and_superblocks_in_fn (frame_block)) + for (struct symbol *sym : block_iterator_range (block)) + { + int print_me = 0; + + switch (sym->loc_class ()) + { + default: + case LOC_UNDEF: /* catches errors */ + case LOC_CONST: /* constant */ + case LOC_TYPEDEF: /* local typedef */ + case LOC_LABEL: /* local label */ + case LOC_BLOCK: /* local function */ + case LOC_CONST_BYTES: /* loc. byte seq. */ + case LOC_UNRESOLVED: /* unresolved static */ + case LOC_OPTIMIZED_OUT: /* optimized out */ + print_me = 0; + break; - case LOC_ARG: /* argument */ - case LOC_REF_ARG: /* reference arg */ - case LOC_REGPARM_ADDR: /* indirect register arg */ - case LOC_LOCAL: /* stack local */ - case LOC_STATIC: /* static */ - case LOC_REGISTER: /* register */ - case LOC_COMPUTED: /* computed location */ - if (what == all) - print_me = 1; - else if (what == locals) - print_me = !sym->is_argument (); - else - print_me = sym->is_argument (); - break; - } - if (print_me) - { - struct symbol *sym2; - struct frame_arg arg, entryarg; - - if (sym->is_argument ()) - sym2 = (lookup_symbol_search_name - (sym->search_name (), - block, SEARCH_VAR_DOMAIN).symbol); - else - sym2 = sym; - gdb_assert (sym2 != NULL); - - arg.sym = sym2; - arg.entry_kind = print_entry_values_no; - entryarg.sym = sym2; - entryarg.entry_kind = print_entry_values_no; - - switch (values) - { - case PRINT_SIMPLE_VALUES: - if (!mi_simple_type_p (sym2->type ())) - break; - [[fallthrough]]; - - case PRINT_ALL_VALUES: - if (sym->is_argument ()) - read_frame_arg (fp_opts, sym2, fi, &arg, &entryarg); - else - read_frame_local (sym2, fi, &arg); + case LOC_ARG: /* argument */ + case LOC_REF_ARG: /* reference arg */ + case LOC_REGPARM_ADDR: /* indirect register arg */ + case LOC_LOCAL: /* stack local */ + case LOC_STATIC: /* static */ + case LOC_REGISTER: /* register */ + case LOC_COMPUTED: /* computed location */ + if (what == all) + print_me = 1; + else if (what == locals) + print_me = !sym->is_argument (); + else + print_me = sym->is_argument (); + break; + } + if (print_me) + { + struct symbol *sym2; + struct frame_arg arg, entryarg; + + if (sym->is_argument ()) + sym2 = (lookup_symbol_search_name + (sym->search_name (), + block, SEARCH_VAR_DOMAIN).symbol); + else + sym2 = sym; + gdb_assert (sym2 != nullptr); + + arg.sym = sym2; + arg.entry_kind = print_entry_values_no; + entryarg.sym = sym2; + entryarg.entry_kind = print_entry_values_no; + + switch (values) + { + case PRINT_SIMPLE_VALUES: + if (!mi_simple_type_p (sym2->type ())) break; - } - - if (arg.entry_kind != print_entry_values_only) - list_arg_or_local (&arg, what, values, skip_unavailable, - fp_opts); - if (entryarg.entry_kind != print_entry_values_no) - list_arg_or_local (&entryarg, what, values, skip_unavailable, - fp_opts); - } - } + [[fallthrough]]; - if (block->function ()) - break; - else - block = block->superblock (); - } + case PRINT_ALL_VALUES: + if (sym->is_argument ()) + read_frame_arg (fp_opts, sym2, fi, &arg, &entryarg); + else + read_frame_local (sym2, fi, &arg); + break; + } + + if (arg.entry_kind != print_entry_values_only) + list_arg_or_local (&arg, what, values, skip_unavailable, + fp_opts); + if (entryarg.entry_kind != print_entry_values_no) + list_arg_or_local (&entryarg, what, values, skip_unavailable, + fp_opts); + } + } } /* Read a frame specification from FRAME_EXP and return the selected frame. diff --git a/gdb/python/py-unwind.c b/gdb/python/py-unwind.c index 6dc5e11cf87..cb19496d46b 100644 --- a/gdb/python/py-unwind.c +++ b/gdb/python/py-unwind.c @@ -635,7 +635,7 @@ pending_framepy_block (PyObject *self, PyObject *args) PENDING_FRAMEPY_REQUIRE_VALID (pending_frame); frame_info_ptr frame = pending_frame->frame_info; - const struct block *block = nullptr, *fn_block; + const struct block *block = nullptr; try { diff --git a/gdb/stack.c b/gdb/stack.c index 6fcc26417e2..e9a01d16a3b 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -2232,16 +2232,11 @@ void iterate_over_block_local_vars (const struct block *block, iterate_over_block_arg_local_vars_cb cb) { - while (block) - { - iterate_over_block_locals (block, cb); - /* After handling the function's top-level block, stop. Don't - continue to its superblock, the block of per-file - symbols. */ - if (block->function ()) - break; - block = block->superblock (); - } + /* After handling the function's top-level block, stop. Don't + continue to its superblock, the block of per-file + symbols. */ + for (auto b : block::block_and_superblocks_in_fn (block)) + iterate_over_block_locals (b, cb); } /* Data to be passed around in the calls to the locals and args diff --git a/gdb/symtab.c b/gdb/symtab.c index d8e4e6375d9..9836a7abb38 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -2002,22 +2002,19 @@ lookup_language_this (const struct language_defn *lang, lookup_name_info this_name (lang->name_of_this (), symbol_name_match_type::SEARCH_NAME); - while (block) + for (auto b : block::block_and_superblocks_in_fn (block)) { struct symbol *sym; - sym = block_lookup_symbol (block, this_name, SEARCH_VFT); + sym = block_lookup_symbol (b, this_name, SEARCH_VFT); if (sym != NULL) { symbol_lookup_debug_printf_v ("lookup_language_this (...) = %s (%s, block %s)", sym->print_name (), host_address_to_string (sym), - host_address_to_string (block)); - return (struct block_symbol) {sym, block}; + host_address_to_string (b)); + return (struct block_symbol) {sym, b}; } - if (block->function ()) - break; - block = block->superblock (); } symbol_lookup_debug_printf_v ("lookup_language_this (...) = NULL"); diff --git a/gdb/tracepoint.c b/gdb/tracepoint.c index 7f078684b14..5608f81211a 100644 --- a/gdb/tracepoint.c +++ b/gdb/tracepoint.c @@ -2456,7 +2456,6 @@ tfind_outside_command (const char *args, int from_tty) static void info_scope_command (const char *args_in, int from_tty) { - const struct block *block; const char *symname; const char *save_args = args_in; int j, count = 0; @@ -2481,9 +2480,9 @@ info_scope_command (const char *args_in, int from_tty) /* Resolve line numbers to PC. */ resolve_sal_pc (&sals[0]); - block = block_for_pc (sals[0].pc); + const struct block *pc_block = block_for_pc (sals[0].pc); - while (block != 0) + for (auto block : block::block_and_superblocks_in_fn (pc_block)) { QUIT; /* Allow user to bail out with ^C. */ for (struct symbol *sym : block_iterator_range (block)) @@ -2607,10 +2606,6 @@ info_scope_command (const char *args_in, int from_tty) gdb_printf (", length %s.\n", pulongest (t->length ())); } } - if (block->function ()) - break; - else - block = block->superblock (); } if (count <= 0) gdb_printf ("Scope for %s contains no locals or arguments.\n",