gdb.Value.dynamic_type is supposed to work for reference and pointer
values. However, the value object in the function 'valpy_get_dynamic_type'
was being dereferenced using 'value_ind' irrespective of the value type
being TYPE_CODE_PTR or TYPE_CODE_REF. This patch fixes that to use
'coerce_ref' for TYPE_CODE_REF values.
ChangeLog:
* python/py-value.c (valpy_get_dynamic_type): Use coerce_ref to
dereference TYPE_CODE_REF values.
testsuite/
* gdb.python/py-value.c: Improve test case.
* gdb.python/py-value.exp: Add new test.
+2014-04-07 Siva Chandra Reddy <sivachandra@google.com>
+
+ * python/py-value.c (valpy_get_dynamic_type): Use coerce_ref to
+ dereference TYPE_CODE_REF values.
+
2014-04-07 Joel Brobecker <brobecker@adacore.com>
* darwin-nat.c (darwin_decode_message): Remove trailing '\n' at
struct value *target;
int was_pointer = TYPE_CODE (type) == TYPE_CODE_PTR;
- target = value_ind (val);
+ if (was_pointer)
+ target = value_ind (val);
+ else
+ target = coerce_ref (val);
type = value_rtti_type (target, NULL, NULL, NULL);
if (type)
+2014-04-07 Siva Chandra Reddy <sivachandra@google.com>
+
+ * gdb.python/py-value.c: Improve test case.
+ * gdb.python/py-value.exp: Add new test.
+
2014-04-07 David Blaikie <dblaikie@gmail.com>
* lib/compiler.c: Identify the clang compiler.
};
Base *base = new Derived ();
+Derived derived;
+Base &base_ref = derived;
void ptr_ref(int*& rptr_int)
{
# Likewise.
gdb_test "python print (gdb.parse_and_eval('base').dynamic_type)" \
"Derived \[*\]"
+ gdb_test "python print (gdb.parse_and_eval('base_ref').dynamic_type)" \
+ "Derived \[&\]"
# A static type case.
gdb_test "python print (gdb.parse_and_eval('5').dynamic_type)" \
"int"