diff --git a/gdb/testsuite/gdb.cp/casts.exp b/gdb/testsuite/gdb.cp/casts.exp index 9122450..dd848db 100644 --- a/gdb/testsuite/gdb.cp/casts.exp +++ b/gdb/testsuite/gdb.cp/casts.exp @@ -151,8 +151,7 @@ gdb_test "print dynamic_cast (derived)" \ "dynamic_cast simple upcast to reference" gdb_test "print dynamic_cast (ad)" \ - " = \\(Derived \\*\\) ${nonzero_hex}( )?" \ - "dynamic_cast simple downcast" + " = \\(Derived \\*\\) ${nonzero_hex}" "dynamic_cast simple downcast" gdb_test "print dynamic_cast (add)" \ " = \\(VirtuallyDerived \\*\\) $nonzero_hex" \ @@ -167,8 +166,7 @@ gdb_test "print dynamic_cast (*ad)" \ "dynamic_cast to reference to non-existing base" gdb_test "print dynamic_cast (add)" \ - " = \\(DoublyDerived \\*\\) ${nonzero_hex}( )?" \ - "dynamic_cast unique downcast" + " = \\(DoublyDerived \\*\\) ${nonzero_hex}" "dynamic_cast unique downcast" gdb_test "print dynamic_cast (add)" \ " = \\(Gamma \\*\\) $nonzero_hex" \ diff --git a/gdb/valops.c b/gdb/valops.c index cf195a3..bd4b963 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -800,13 +800,14 @@ value_dynamic_cast (struct type *type, struct value *arg) && TYPE_CODE (TYPE_TARGET_TYPE (resolved_type)) == TYPE_CODE_VOID) return value_at_lazy (type, addr); - tem = value_at (type, addr); + tem = value_at (rtti_type, addr); /* The first dynamic check specified in 5.2.7. */ if (is_public_ancestor (arg_type, TYPE_TARGET_TYPE (resolved_type))) { if (class_types_same_p (rtti_type, TYPE_TARGET_TYPE (resolved_type))) - return tem; + return value_from_pointer (type, addr); + result = NULL; if (dynamic_cast_check_1 (TYPE_TARGET_TYPE (resolved_type), value_contents_for_printing (tem),