(Ada) Fix -var-list-children MI command for union type
authorXavier Roirand <roirand@adacore.com>
Mon, 10 Sep 2018 15:30:50 +0000 (10:30 -0500)
committerJoel Brobecker <brobecker@adacore.com>
Mon, 10 Sep 2018 15:30:50 +0000 (11:30 -0400)
commit2963898f38dab323a9e381d7c41a26b9c3498882
treef2a7149b0fcf4ddb831705fe31e3f206dc002e57
parent849cba3b83f8b808521ef5b1aaa8fb33c04bd9fa
(Ada) Fix -var-list-children MI command for union type

Using this Ada code:

   type Union_Type (A : Boolean := False) is record
      case A is
         when True  => B : Integer;
         when False => C : Float;
      end case;
   end record;
   pragma Unchecked_Union (Union_Type);
   Ut : Union_Type := (A => True, B => 3);

In GDB/MI mode, once creating a varobj from variable "Ut" as follow:

(gdb) -var-create var1 * ut
^done,name="var1",numchild="2",value="{...}",type="foo.union_type",thread-id="1",has_more="0"

Printing the list of its children displays:

(gdb) -var-list-children 1 var1
^error,msg="Duplicate variable object name"

Whereas it should be

(gdb) -var-list-children 1 var1
^done,numchild="2",children=[child={name="var1.b",exp="b",numchild="0",value="3",type="integer",thread-id="1"},child={name="var1.c",exp="c",numchild="0",value="4.20389539e-45",type="float",thread-id="1"}],has_more="0"

The problem occurs because ada_varobj_describe_struct_child wasn't
handling unions.  This patch fixes this.

gdb/ChangeLog:

        * ada-varobj.c (ada_varobj_describe_struct_child)
        (ada_varobj_describe_child): Handle union case like struct one.

testsuite/ChangeLog

        * gdb.ada/mi_var_union.exp: New testcase.
        * gdb.ada/mi_var_union/bar.adb: New file.
        * gdb.ada/mi_var_union/pck.adb: New file.
        * gdb.ada/mi_var_union/pck.asd: New file.

Tested on x86_64-linux.
gdb/ChangeLog
gdb/ada-varobj.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.ada/mi_var_union.exp [new file with mode: 0644]
gdb/testsuite/gdb.ada/mi_var_union/bar.adb [new file with mode: 0644]
gdb/testsuite/gdb.ada/mi_var_union/pck.adb [new file with mode: 0644]
gdb/testsuite/gdb.ada/mi_var_union/pck.ads [new file with mode: 0644]