diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index a13a53ebc46..9292e52c000 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -22657,7 +22657,7 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu) && (dwarf2_name (parent, cu) != NULL)) return dwarf2_name (parent, cu); } - return determine_prefix (parent, cu); + return ""; case DW_TAG_enumeration_type: parent_type = read_type_die (parent, cu); if (parent_type->is_declared_class ()) diff --git a/gdb/testsuite/gdb.cp/nested-class-func-class.cc b/gdb/testsuite/gdb.cp/nested-class-func-class.cc new file mode 100644 index 00000000000..a8d255fcd93 --- /dev/null +++ b/gdb/testsuite/gdb.cp/nested-class-func-class.cc @@ -0,0 +1,46 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2021 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 . */ + +int +foo () +{ + class F1 + { + public: + int a; + int + vvv () + { + class F2 + { + int f; + }; + F2 abcd; + return 1; /* BP 1 */ + } + }; + + F1 x; + int a = x.vvv (); + return a; /* BP 2 */ +} + +int +main () +{ + return foo (); +} diff --git a/gdb/testsuite/gdb.cp/nested-class-func-class.exp b/gdb/testsuite/gdb.cp/nested-class-func-class.exp new file mode 100644 index 00000000000..584c47f3a22 --- /dev/null +++ b/gdb/testsuite/gdb.cp/nested-class-func-class.exp @@ -0,0 +1,47 @@ +# Copyright 2021 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 . + +# Regression test for type printing of private nested classes. + +if {[skip_cplus_tests]} { continue } + +load_lib "cp-support.exp" + +standard_testfile .cc + +if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { + return -1 +} + +if {![runto_main]} { + return -1 +} + +gdb_breakpoint [gdb_get_line_number "BP 1"] +gdb_breakpoint [gdb_get_line_number "BP 2"] +gdb_continue_to_breakpoint "BP 1" + +cp_test_ptype_class \ + "F2" "" "class" "F2" \ + { + { field private "int f;" } + } + +gdb_continue_to_breakpoint "BP 2" + +with_test_prefix "BP 2" { + gdb_test "ptype F1::F2" "There is no field named F2" + gdb_test "ptype F2" "No symbol \"F2\" in current context." +}