aboutsummaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.dwarf2
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2024-09-14 14:09:35 +0200
committerTom de Vries <tdevries@suse.de>2024-09-14 14:09:35 +0200
commit93a20d956e633cc1a87e68d88d2fc51adc787857 (patch)
tree4c8e4a31768b5865dfbecaf603bc96d215d209b9 /gdb/testsuite/gdb.dwarf2
parent2693187cc58db107db4255756aa5dbbe090f3b6e (diff)
downloadgdb-93a20d956e633cc1a87e68d88d2fc51adc787857.zip
gdb-93a20d956e633cc1a87e68d88d2fc51adc787857.tar.gz
gdb-93a20d956e633cc1a87e68d88d2fc51adc787857.tar.bz2
[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 <tom@tromey.com> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32158
Diffstat (limited to 'gdb/testsuite/gdb.dwarf2')
-rw-r--r--gdb/testsuite/gdb.dwarf2/enum-type-c++.cc6
-rw-r--r--gdb/testsuite/gdb.dwarf2/enum-type-c++.exp12
2 files changed, 18 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.dwarf2/enum-type-c++.cc b/gdb/testsuite/gdb.dwarf2/enum-type-c++.cc
index c0ffaad..691c7fc 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 44ad225..a3dfb4d 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"