varobj/Ada: Missing children for interface-wide tagged types
authorJoel Brobecker <brobecker@adacore.com>
Sat, 4 Jan 2014 02:31:11 +0000 (06:31 +0400)
committerJoel Brobecker <brobecker@adacore.com>
Tue, 7 Jan 2014 04:29:04 +0000 (08:29 +0400)
commitf30b8b38d48949edc10344089d05015a659f87aa
treeaa17158e1a84d2dccf72444818c67a38c2267ccb
parent8e355c5d24da7a92110851de95ead5ccfa089fe9
varobj/Ada: Missing children for interface-wide tagged types

Consider the following code:

   type Element is abstract tagged null record;
   type GADataType is interface;
   type Data_Type is new Element and GADataType with record
      I : Integer := 42;
   end record;
   Result1 : Data_Type;
   GGG1    : GADataType'Class := GADataType'Class (Result1);

When trying to create a varobj for variable ggg1, GDB currently
returns an object which has no child:

    -var-create ggg1 * ggg1
    ^done,name="ggg1",numchild="0",[...]

This is incorrect, it should return an object which has one child
(field "i"). This is because tagged-type objects are dynamic, and
we need to apply a small transformation in order to get their actual
type. This is already done on the GDB/CLI side in ada-valprint,
and it needs to be done on the ada-varobj side as well.

gdb/ChangeLog:

        * ada-varobj.c (ada_varobj_adjust_for_child_access): Convert
        tagged type objects to their actual type.

gdb/testsuite/ChangeLog:

        * gdb.ada/mi_interface: New testcase.
gdb/ada-varobj.c
gdb/testsuite/gdb.ada/mi_interface.exp [new file with mode: 0644]
gdb/testsuite/gdb.ada/mi_interface/foo.adb [new file with mode: 0644]
gdb/testsuite/gdb.ada/mi_interface/pck.adb [new file with mode: 0644]
gdb/testsuite/gdb.ada/mi_interface/pck.ads [new file with mode: 0644]