From 3296caafa31264bf2ea8f2ebd01efcd3caeb6a58 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Fri, 17 Jul 2026 16:30:15 +0200 Subject: [PATCH] [gdb] Fix hard-coded constants in buildsym_compunit::make_blockvector I came across some code in buildsym_compunit::make_blockvector that uses hardcoded constants 0 and 1: ... gdb_assert (blockvector->block (0)->is_global_block ()); gdb_assert (blockvector->block (1)->is_static_block ()); ... Fix this by instead using the symbolic constants GLOBAL_BLOCK and STATIC_BLOCK. The same function has an odd-looking for loop that uses a hard-coded '1' to skip the global block: ... /* The 'J > 1' here is so that we don't place the global block into the map. For CU with gaps, the static block will reflect the gaps, while the global block will just reflect the full extent of the range. */ for (int j = num_blocks; j > 1; ) { --j; struct block *b = blockvector->block (j); ... Fix this by rewriting it into an ordinary descending for loop, and using symbolic constant GLOBAL_BLOCK to avoid the global block: ... for (int j = num_blocks - 1; j > GLOBAL_BLOCK; --j) { struct block *b = blockvector->block (j); ... Approved-By: Tom Tromey --- gdb/buildsym.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/gdb/buildsym.c b/gdb/buildsym.c index b543cd10eb5..2b0a9a39b81 100644 --- a/gdb/buildsym.c +++ b/gdb/buildsym.c @@ -363,16 +363,15 @@ buildsym_compunit::make_blockvector () gdb_assert (num_blocks > 1); /* Assert our understanding of how the blocks are laid out. */ - gdb_assert (blockvector->block (0)->is_global_block ()); - gdb_assert (blockvector->block (1)->is_static_block ()); + gdb_assert (blockvector->block (GLOBAL_BLOCK)->is_global_block ()); + gdb_assert (blockvector->block (STATIC_BLOCK)->is_static_block ()); - /* The 'J > 1' here is so that we don't place the global block into - the map. For CU with gaps, the static block will reflect the - gaps, while the global block will just reflect the full extent of + /* The 'J > GLOBAL_BLOCK' here is so that we don't place the global + block into the map. For CU with gaps, the static block will reflect + the gaps, while the global block will just reflect the full extent of the range. */ - for (int j = num_blocks; j > 1; ) + for (int j = num_blocks - 1; j > GLOBAL_BLOCK; --j) { - --j; struct block *b = blockvector->block (j); gdb_assert (!b->is_global_block ()); -- 2.47.3