From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 0Qb2GWih9GkT9ggAWB0awg (envelope-from ) for ; Fri, 01 May 2026 08:49:44 -0400 Authentication-Results: simark.ca; dkim=pass (1024-bit key; unprotected) header.d=suse.de header.i=@suse.de header.a=rsa-sha256 header.s=susede2_rsa header.b=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; dkim-atps=neutral Received: by simark.ca (Postfix, from userid 112) id 59CD91E0BA; Fri, 01 May 2026 08:49:44 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-2.4 required=5.0 tests=ARC_SIGNED,ARC_VALID,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_CERTIFIED_BLOCKED, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED autolearn=ham autolearn_force=no version=4.0.1 Received: from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id 53D181E067 for ; Fri, 01 May 2026 08:49:42 -0400 (EDT) Received: from vm01.sourceware.org (localhost [127.0.0.1]) by sourceware.org (Postfix) with ESMTP id F23064AA096D for ; Fri, 1 May 2026 12:49:41 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F23064AA096D 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 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 Content-Transfer-Encoding: 8bit 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-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces~public-inbox=simark.ca@sourceware.org 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", -- 2.51.0