aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/cp-namespace.c5
-rw-r--r--gdb/testsuite/gdb.cp/impl-this.exp45
-rw-r--r--gdb/valops.c4
3 files changed, 37 insertions, 17 deletions
diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c
index 837eafc..1d7759a 100644
--- a/gdb/cp-namespace.c
+++ b/gdb/cp-namespace.c
@@ -780,12 +780,13 @@ cp_find_type_baseclass_by_name (struct type *parent_type, const char *name)
for (i = 0; i < TYPE_N_BASECLASSES (parent_type); ++i)
{
struct type *type = check_typedef (TYPE_BASECLASS (parent_type, i));
- const char *base_name = TYPE_BASECLASS_NAME (parent_type, i);
+ const char *tdef_name = TYPE_BASECLASS_NAME (parent_type, i);
+ const char *base_name = type->name ();
if (base_name == NULL)
continue;
- if (streq (base_name, name))
+ if (streq (tdef_name, name) || streq (base_name, name))
return type;
type = cp_find_type_baseclass_by_name (type, name);
diff --git a/gdb/testsuite/gdb.cp/impl-this.exp b/gdb/testsuite/gdb.cp/impl-this.exp
index 2910bf7..4a11fb2 100644
--- a/gdb/testsuite/gdb.cp/impl-this.exp
+++ b/gdb/testsuite/gdb.cp/impl-this.exp
@@ -26,6 +26,8 @@ if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} {
return -1
}
+set gcc_used [test_compiler_info gcc-*-*]
+
# First test expressions when there is no context.
with_test_prefix "before run" {
gdb_test "print i" "No symbol \"i\" in current context."
@@ -63,15 +65,23 @@ with_test_prefix "at D::f (valid expressions)" {
gdb_test "print D::i" "= 4"
gdb_test "print D::B<int>::i" "= 2"
gdb_test "print B<int>::i" "= 2"
- gdb_test "print D::Bint::i" \
- "No type \"Bint\" within class or namespace \"D\"."
+
+ if {$gcc_used} {
+ setup_xfail *-*-* gcc/60833
+ }
+ gdb_test "print D::Bint::i" "= 2"
+
gdb_test "print Bint::i" "= 2"
gdb_test "print D::C::i" "= 3"
gdb_test "print C::i" "= 3"
gdb_test "print D::B<int>::A<int>::i" "= 1"
gdb_test "print B<int>::A<int>::i" "= 1"
- gdb_test "print D::Bint::A<int>::i" \
- "No type \"Bint\" within class or namespace \"D\"."
+
+ if {$gcc_used} {
+ setup_xfail *-*-* gcc/60833
+ }
+ gdb_test "print D::Bint::A<int>::i" "= 1"
+
gdb_test "print Bint::A<int>::i" "= 1"
gdb_test "print A<int>::i" "= 1"
gdb_test "print D::C::A<int>::i" "= 1"
@@ -88,11 +98,16 @@ with_test_prefix "at D::f (valid expressions)" {
with_test_prefix "at D::f (invalid expressions)" {
gdb_test "print D::B<int>::c" "There is no field named c"
gdb_test "print D::B<int>::A<int>::c" "There is no field named c"
- gdb_test "print D::Bint::c" \
- "No type \"Bint\" within class or namespace \"D\"."
- gdb_test "print D::Bint::A<int>::c" \
- "No type \"Bint\" within class or namespace \"D\"."
+ if {$gcc_used} {
+ setup_xfail *-*-* gcc/60833
+ }
+ gdb_test "print D::Bint::c" "There is no field named c"
+ if {$gcc_used} {
+ setup_xfail *-*-* gcc/60833
+ }
+ gdb_test "print D::Bint::A<int>::c" "There is no field named c"
+
gdb_test "print D::C::A<int>::c" "There is no field named c"
gdb_test "print B<int>::c" "There is no field named c"
gdb_test "print B<int>::A<int>::c" "There is no field named c"
@@ -101,10 +116,16 @@ with_test_prefix "at D::f (invalid expressions)" {
gdb_test "print C::A<int>::c" "There is no field named c"
gdb_test "print D::B<int>::x" "There is no field named x"
gdb_test "print D::B<int>::A<int>::x" "There is no field named x"
- gdb_test "print D::Bint::x" \
- "No type \"Bint\" within class or namespace \"D\"."
- gdb_test "print D::Bint::A<int>::x" \
- "No type \"Bint\" within class or namespace \"D\"."
+
+ if {$gcc_used} {
+ setup_xfail *-*-* gcc/60833
+ }
+ gdb_test "print D::Bint::x" "There is no field named x"
+ if {$gcc_used} {
+ setup_xfail *-*-* gcc/60833
+ }
+ gdb_test "print D::Bint::A<int>::x" "There is no field named x"
+
gdb_test "print B<int>::x" "There is no field named x"
gdb_test "print B<int>::A<int>::x" "There is no field named x"
gdb_test "print Bint::x" "There is no field named x"
diff --git a/gdb/valops.c b/gdb/valops.c
index 0a215d6..de8a688 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -2066,9 +2066,7 @@ struct_field_searcher::search (struct value *arg1, LONGEST offset,
name is not yet filled in. */
int found_baseclass = (m_looking_for_baseclass
&& TYPE_BASECLASS_NAME (type, i) != NULL
- && (strcmp_iw (m_name,
- TYPE_BASECLASS_NAME (type,
- i)) == 0));
+ && (strcmp_iw (m_name, basetype->name ()) == 0));
LONGEST boffset = value_embedded_offset (arg1) + offset;
if (BASETYPE_VIA_VIRTUAL (type, i))