Copy over fix for fetching dynamic type of a reference from python side.
authorDoug Evans <xdje42@gmail.com>
Sat, 12 Apr 2014 16:09:41 +0000 (09:09 -0700)
committerDoug Evans <xdje42@gmail.com>
Sat, 12 Apr 2014 16:09:41 +0000 (09:09 -0700)
* guile/scm-value.c (gdbscm_value_dynamic_type): Use coerce_ref to
dereference TYPE_CODE_REF values.

testsuite/
* gdb.guile/scm-value.c: Improve test case.
* gdb.guile/scm-value.exp: Add new test.

gdb/ChangeLog
gdb/guile/scm-value.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.guile/scm-value.c
gdb/testsuite/gdb.guile/scm-value.exp

index 2184479..83d75ac 100644 (file)
@@ -1,3 +1,9 @@
+2014-04-12  Siva Chandra Reddy  <sivachandra@google.com>
+           Doug Evans  <xdje42@gmail.com>
+
+       * guile/scm-value.c (gdbscm_value_dynamic_type): Use coerce_ref to
+       dereference TYPE_CODE_REF values.
+
 2014-04-11  Joel Brobecker  <brobecker@adacore.com>
 
        Revert the following changes due to regressions:
index 8ca0762..2160a1e 100644 (file)
@@ -585,7 +585,10 @@ gdbscm_value_dynamic_type (SCM self)
          struct value *target;
          int was_pointer = TYPE_CODE (type) == TYPE_CODE_PTR;
 
-         target = value_ind (value);
+         if (was_pointer)
+           target = value_ind (value);
+         else
+           target = coerce_ref (value);
          type = value_rtti_type (target, NULL, NULL, NULL);
 
          if (type)
index f7a4b8e..730c116 100644 (file)
@@ -1,3 +1,9 @@
+2014-04-12  Siva Chandra Reddy  <sivachandra@google.com>
+           Doug Evans  <xdje42@gmail.com>
+
+       * gdb.guile/scm-value.c: Improve test case.
+       * gdb.guile/scm-value.exp: Add new test.
+
 2014-04-11  David Blaikie  <dblaikie@gmail.com>
 
        * gdb.opt/inline-break.exp: Explicitly specify -std=gnu89 to
index 3c61911..e4f7530 100644 (file)
@@ -49,6 +49,8 @@ struct Derived : public Base {
 };
 
 Base *base = new Derived ();
+Derived derived;
+Base &base_ref = derived;
 
 void ptr_ref(int*& rptr_int)
 {
index 0bcd381..2784da2 100644 (file)
@@ -335,6 +335,8 @@ proc test_subscript_regression {exefile lang} {
        # Likewise.
        gdb_test "gu (print (value-dynamic-type (parse-and-eval \"base\")))" \
            "= Derived \[*\]"
+       gdb_test "gu (print (value-dynamic-type (parse-and-eval \"base_ref\")))" \
+           "= Derived \[&\]"
        # A static type case.
        gdb_test "gu (print (value-dynamic-type (parse-and-eval \"5\")))" \
            "= int"