diff options
-rw-r--r-- | gdb/dwarf2/read.c | 2 | ||||
-rw-r--r-- | gdb/testsuite/gdb.cp/empty-enum.cc | 31 | ||||
-rw-r--r-- | gdb/testsuite/gdb.cp/empty-enum.exp | 48 |
3 files changed, 81 insertions, 0 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index 69b2310be1f..038f31cb06b 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -13195,6 +13195,8 @@ update_enumeration_type_from_children (struct die_info *die, memcpy (type->fields (), fields.data (), sizeof (struct field) * fields.size ()); } + else + flag_enum = 0; if (unsigned_enum) type->set_is_unsigned (true); diff --git a/gdb/testsuite/gdb.cp/empty-enum.cc b/gdb/testsuite/gdb.cp/empty-enum.cc new file mode 100644 index 00000000000..1a0eeced710 --- /dev/null +++ b/gdb/testsuite/gdb.cp/empty-enum.cc @@ -0,0 +1,31 @@ +/* Copyright 2023 Free Software Foundation, Inc. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +enum enum1 {}; + +enum class enum2 : unsigned char {}; + +void +breakpt (enum1 arg1, enum2 arg2) +{ + /* Nothing. */ +} + +int +main () +{ + breakpt ((enum1) 8, (enum2) 4); + + return 0; +} diff --git a/gdb/testsuite/gdb.cp/empty-enum.exp b/gdb/testsuite/gdb.cp/empty-enum.exp new file mode 100644 index 00000000000..83cb8cb3973 --- /dev/null +++ b/gdb/testsuite/gdb.cp/empty-enum.exp @@ -0,0 +1,48 @@ +# Copyright 2023 Free Software Foundation, Inc. +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +# Test how GDB displays empty enums. At one point an enum with no +# enumeration values would be considered a flag enum, and, as a +# consequence any value with that type would display like: +# +# (gdb) print enum_var +# $1 = (unknown: 0x8) +# +# Which resulted in a lot of noise. Now GDB treats empty enums as a +# non-flag enum, and should print them like this: +# +# (gdb) print enum_var +# $1 = 8 +# +# This test checks this behaviour. + +standard_testfile .cc + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile]} { + return -1 +} + +if {![runto_main]} { + return -1 +} + +gdb_breakpoint "breakpt" +gdb_continue_to_breakpoint "stop in breakpt" + + +gdb_test "print arg1" " = 8" +gdb_test "print arg2" " = 4" + +gdb_test "ptype arg1" "type = enum enum1 : unsigned int \\{\\}" +gdb_test "ptype arg2" "type = enum class enum2 : unsigned char \\{\\}" |