[binutils-gdb] Inconsistent treatment of template parameters in DWARF reader
Tom Tromey
tromey@sourceware.org
Wed Mar 5 17:13:09 GMT 2025
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=6a739b5551261f53774c2773a912668c14d991f9
commit 6a739b5551261f53774c2773a912668c14d991f9
Author: Tom Tromey <tom@tromey.com>
Date: Wed Jan 1 14:34:10 2025 -0700
Inconsistent treatment of template parameters in DWARF reader
I noticed that if you hack some clean_restart calls into
paramless.exp, the test will fail. That is, the test currently relies
on the desired CUs already being expanded when trying to set a
breakpoint -- which is clearly a bug, the CU expansion state should
not affect "break".
I tracked this down to incorrect construction of a lookup_name_info in
cooked_index_functions::expand_symtabs_matching.
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32510
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Diff:
---
gdb/dwarf2/read.c | 6 ++----
gdb/testsuite/gdb.cp/paramless.exp | 15 +++++----------
2 files changed, 7 insertions(+), 14 deletions(-)
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 91638182092..3aa3e9e686d 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -15757,10 +15757,8 @@ cooked_index_functions::expand_symtabs_matching
std::vector<lookup_name_info> segment_lookup_names;
segment_lookup_names.reserve (name_vec.size ());
for (auto &segment_name : name_str_vec)
- {
- segment_lookup_names.emplace_back (segment_name,
- symbol_name_match_type::FULL, completing, true);
- }
+ segment_lookup_names.emplace_back (segment_name, match_type,
+ completing, true);
for (const cooked_index_entry *entry : table->find (name_str_vec.back (),
completing))
diff --git a/gdb/testsuite/gdb.cp/paramless.exp b/gdb/testsuite/gdb.cp/paramless.exp
index fe7c0b38748..68f66441f80 100644
--- a/gdb/testsuite/gdb.cp/paramless.exp
+++ b/gdb/testsuite/gdb.cp/paramless.exp
@@ -30,17 +30,12 @@ if {[prepare_for_testing "failed to prepare" $testfile $srcfile $opts]} {
return -1
}
-gdb_breakpoint "outer<int>::fn" message
-delete_breakpoints
-
-gdb_breakpoint "outer<char>::fn<short>" message
-delete_breakpoints
+foreach ordinary {"outer<int>::fn" "outer<char>::fn<short>" "toplev<char>"} {
+ gdb_breakpoint $ordinary message
+ clean_restart $testfile
+}
gdb_test "break outer::fn" "Breakpoint $decimal at .*2 locations."
-delete_breakpoints
+clean_restart $testfile
gdb_test "break toplev" "Breakpoint $decimal at .*2 locations."
-delete_breakpoints
-
-gdb_breakpoint "toplev<char>" message
-delete_breakpoints
More information about the Gdb-cvs
mailing list