From: Tom de Vries Date: Sun, 15 Sep 2024 13:30:53 +0000 (+0200) Subject: [gdb/testsuite] Add regression test for PR32158 X-Git-Tag: gdb-15.2-release~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9ca807bc5f3ba68e736368b4e3bd942028cb566b;p=thirdparty%2Fbinutils-gdb.git [gdb/testsuite] Add regression test for PR32158 Consider test-case: ... namespace ns { enum class ec { val2 = 2 }; } int main () { return (int)ns::ec::val2; } ... compiled with debug info: ... $ g++ test.c -g ... When looking at the cooked index entry for val2 using "maint print objfiles", we get: ... [7] ((cooked_index_entry *) 0x7f8ecc002ef0) name: val2 canonical: val2 qualified: ns::val2 DWARF tag: DW_TAG_enumerator flags: 0x0 [] DIE offset: 0xe9 parent: ((cooked_index_entry *) 0x7f8ecc002e90) [ns] ... which is wrong, there is no source level entity ns::val2. This is PR symtab/32158. This is a regression since commit 4e417d7bb1c ("Change handling of DW_TAG_enumeration_type in DWARF scanner"). Reverting the commit on current trunk fixes the problem, and gets us instead: ... [7] ((cooked_index_entry *) 0x7fba70002ef0) name: val2 canonical: val2 qualified: ns::ec::val2 DWARF tag: DW_TAG_enumerator flags: 0x0 [] DIE offset: 0xe9 parent: ((cooked_index_entry *) 0x7fba70002ec0) [ec] ... Add a regression test for this PR in test-case gdb.dwarf2/enum-type-c++.exp. Tested on x86_64-linux. Approved-By: Tom Tromey Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32158 (cherry picked from commit 93a20d956e633cc1a87e68d88d2fc51adc787857) --- diff --git a/gdb/testsuite/gdb.dwarf2/enum-type-c++.cc b/gdb/testsuite/gdb.dwarf2/enum-type-c++.cc index c0ffaad0316..691c7fc7d88 100644 --- a/gdb/testsuite/gdb.dwarf2/enum-type-c++.cc +++ b/gdb/testsuite/gdb.dwarf2/enum-type-c++.cc @@ -24,6 +24,12 @@ public: }; }; +enum class ec +{ + val2 = 2, +}; } int u1 = ns::A::val1; + +int u2 = (int)ns::ec::val2; diff --git a/gdb/testsuite/gdb.dwarf2/enum-type-c++.exp b/gdb/testsuite/gdb.dwarf2/enum-type-c++.exp index 44ad225de02..a3dfb4d2f74 100644 --- a/gdb/testsuite/gdb.dwarf2/enum-type-c++.exp +++ b/gdb/testsuite/gdb.dwarf2/enum-type-c++.exp @@ -42,3 +42,15 @@ gdb_test_lines "maint print objfiles" \ ".*"] gdb_test "print $val1" " = $val1" + +# Regression test for PR32158. +setup_kfail "gdb/32158" *-*-* +set val2 ns::ec::val2 +gdb_test_lines "maint print objfiles" \ + "val2 has correct parent" \ + [multi_line \ + "" \ + "$re_ws+qualified:$re_ws+$val2" \ + ".*"] + +gdb_test "print $val2" " = $val2"