Home | History | Annotate | Line # | Download | only in gdb.mi
mi-var-child.exp revision 1.1.1.5
      1 # Copyright 1999-2019 Free Software Foundation, Inc.
      2 
      3 # This program is free software; you can redistribute it and/or modify
      4 # it under the terms of the GNU General Public License as published by
      5 # the Free Software Foundation; either version 3 of the License, or
      6 # (at your option) any later version.
      7 #
      8 # This program is distributed in the hope that it will be useful,
      9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     11 # GNU General Public License for more details.
     12 #
     13 # You should have received a copy of the GNU General Public License
     14 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
     15 
     16 # Test essential Machine interface (MI) operations
     17 #
     18 # Verify that, using the MI, we can create, update, delete variables.
     19 #
     20 
     21 
     22 load_lib mi-support.exp
     23 set MIFLAGS "-i=mi"
     24 
     25 gdb_exit
     26 if [mi_gdb_start] {
     27     continue
     28 }
     29 
     30 standard_testfile
     31 
     32 if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     33     untested "failed to compile"
     34     return -1
     35 }
     36 
     37 mi_delete_breakpoints
     38 mi_gdb_reinitialize_dir $srcdir/$subdir
     39 mi_gdb_load ${binfile}
     40 
     41 mi_runto do_children_tests
     42 
     43 set line_dlt_first_real [gdb_get_line_number "weird = &struct_declarations;"]
     44 mi_continue_to_line $line_dlt_first_real "step to real start of do_children_test"
     45 
     46 
     47 #####        #####
     48 #                #
     49 # children tests #
     50 #                #
     51 #####        #####
     52 
     53 # Test: c_variable-4.2
     54 # Desc: create variable "struct_declarations"
     55 mi_create_varobj "struct_declarations" "struct_declarations" \
     56 	"create local variable struct_declarations"
     57 
     58 # Test: c_variable-4.3
     59 # Desc: children of struct_declarations
     60 # STABS doesn't give us argument types for the func ptr structs, but
     61 # Dwarf 2 does.
     62 mi_list_varobj_children "struct_declarations" {
     63     {struct_declarations.integer integer 0 int}
     64     {struct_declarations.character character 0 char}
     65     {struct_declarations.char_ptr char_ptr 1 "char \\*"}
     66     {struct_declarations.long_int long_int 0 "long"}
     67     {struct_declarations.int_ptr_ptr int_ptr_ptr 1 "int \\*\\*"}
     68     {struct_declarations.long_array long_array 12 "long \\[12\\]"}
     69     {struct_declarations.func_ptr func_ptr 0 "void \\(\\*\\)\\((void)?\\)"}
     70     {struct_declarations.func_ptr_struct func_ptr_struct 0 \
     71          "struct _struct_decl \\(\\*\\)(\\(int, char \\*, long\\))?"}
     72     {struct_declarations.func_ptr_ptr func_ptr_ptr 0 \
     73         "struct _struct_decl \\*\\(\\*\\)\\((int, char \\*, long)?\\)"}
     74     {struct_declarations.u1 u1 4 "union \\{\\.\\.\\.\\}"}
     75     {struct_declarations.s2 s2 4 "struct \\{\\.\\.\\.\\}"}
     76 } "get children of struct_declarations"
     77 
     78 #gdbtk_test c_variable-4.3 {children of struct_declarations} {
     79 #  get_children  struct_declarations
     80 #} {integer character char_ptr long_int int_ptr_ptr long_array func_ptr func_ptr_struct func_ptr_ptr u1 s2}
     81 
     82 # Test: c_variable-4.4
     83 # Desc: number of children of struct_declarations
     84 mi_gdb_test "-var-info-num-children struct_declarations" \
     85 	"\\^done,numchild=\"11\"" \
     86 	"get number of children of struct_declarations"
     87 
     88 # Test: c_variable-4.5
     89 # Desc: children of struct_declarations.integer
     90 mi_list_varobj_children "struct_declarations.integer" {} \
     91     "get children of struct_declarations.integer"
     92 
     93 # Test: c_variable-4.6
     94 # Desc: number of children of struct_declarations.integer
     95 mi_gdb_test "-var-info-num-children struct_declarations.integer" \
     96 	"\\^done,numchild=\"0\"" \
     97 	"get number of children of struct_declarations.integer"
     98 
     99 # Test: c_variable-4.7
    100 # Desc: children of struct_declarations.character
    101 mi_list_varobj_children "struct_declarations.character" {} \
    102 	"get children of struct_declarations.character"
    103 
    104 # Test: c_variable-4.8
    105 # Desc: number of children of struct_declarations.character
    106 mi_gdb_test "-var-info-num-children struct_declarations.character" \
    107 	"\\^done,numchild=\"0\"" \
    108 	"get number of children of struct_declarations.character"
    109 
    110 # Test: c_variable-4.9
    111 # Desc: children of struct_declarations.char_ptr
    112 mi_list_varobj_children "struct_declarations.char_ptr" {
    113     {{struct_declarations.char_ptr.\*char_ptr} {\*char_ptr} 0 char}
    114 } "get children of struct_declarations.char_ptr"
    115 
    116 # Test: c_variable-4.10
    117 # Desc: number of children of struct_declarations.char_ptr
    118 mi_gdb_test "-var-info-num-children struct_declarations.char_ptr" \
    119 	"\\^done,numchild=\"1\"" \
    120 	"get number of children of struct_declarations.char_ptr"
    121 
    122 # Test: c_variable-4.11
    123 # Desc: children of struct_declarations.long_int
    124 mi_list_varobj_children "struct_declarations.long_int" {} \
    125 	"get children of struct_declarations.long_int"
    126 
    127 # Test: c_variable-4.12
    128 # Desc: number of children of struct_declarations.long_int
    129 mi_gdb_test "-var-info-num-children struct_declarations.long_int" \
    130 	"\\^done,numchild=\"0\"" \
    131 	"get number of children of struct_declarations.long_int"
    132 
    133 # Test: c_variable-4.13
    134 # Desc: children of int_ptr_ptr
    135 mi_list_varobj_children "struct_declarations.int_ptr_ptr" {
    136     {{struct_declarations.int_ptr_ptr.\*int_ptr_ptr} {\*int_ptr_ptr} 1 {int \*}}
    137 } "get children of struct_declarations.int_ptr_ptr"
    138 
    139 #gdbtk_test c_variable-4.13 {children of int_ptr_ptr} {
    140 #  get_children struct_declarations.int_ptr_ptr
    141 #} {*int_ptr_ptr}
    142 
    143 # Test: c_variable-4.14
    144 # Desc: number of children of int_ptr_ptr
    145 mi_gdb_test "-var-info-num-children struct_declarations.int_ptr_ptr" \
    146 	"\\^done,numchild=\"1\"" \
    147 	"get number of children of struct_declarations.int_ptr_ptr"
    148 
    149 
    150 # Test: c_variable-4.15
    151 # Desc: children of struct_declarations.long_array
    152 mi_list_array_varobj_children "struct_declarations.long_array" 12 \
    153     "long" \
    154     "get children of struct_declarations.long_array"
    155 
    156 # Test: c_variable-4.16
    157 # Desc: number of children of struct_declarations.long_array
    158 mi_gdb_test "-var-info-num-children struct_declarations.long_array" \
    159 	"\\^done,numchild=\"12\"" \
    160 	"get number of children of struct_declarations.long_array"
    161 
    162 # Test: c_variable-4.17
    163 # Desc: children of struct_declarations.func_ptr
    164 mi_list_varobj_children "struct_declarations.func_ptr" {} \
    165 	"get children of struct_declarations.func_ptr"
    166 
    167 # Test: c_variable-4.18
    168 # Desc: number of children of struct_declarations.func_ptr
    169 mi_gdb_test "-var-info-num-children struct_declarations.func_ptr" \
    170 	"\\^done,numchild=\"0\"" \
    171 	"get number of children of struct_declarations.func_ptr"
    172 
    173 
    174 # Test: c_variable-4.19
    175 # Desc: children of struct_declarations.func_ptr_struct
    176 mi_list_varobj_children "struct_declarations.func_ptr_struct" {} \
    177 	"get children of struct_declarations.func_ptr_struct"
    178 
    179 # Test: c_variable-4.20
    180 # Desc: number of children of struct_declarations.func_ptr_struct
    181 mi_gdb_test "-var-info-num-children struct_declarations.func_ptr_struct" \
    182 	"\\^done,numchild=\"0\"" \
    183 	"get number of children of struct_declarations.func_ptr_struct"
    184 
    185 
    186 # Test: c_variable-4.21
    187 # Desc: children of struct_declarations.func_ptr_ptr
    188 mi_list_varobj_children "struct_declarations.func_ptr_ptr" {} \
    189 	"get children of struct_declarations.func_ptr_ptr"
    190 
    191 # Test: c_variable-4.22
    192 # Desc: number of children of struct_declarations.func_ptr_ptr
    193 mi_gdb_test "-var-info-num-children struct_declarations.func_ptr_ptr" \
    194        "\\^done,numchild=\"0\"" \
    195        "get number of children of struct_declarations.func_ptr_ptr"
    196 
    197 # Test: c_variable-4.23
    198 # Desc: children of struct_declarations.u1
    199 mi_list_varobj_children "struct_declarations.u1" {
    200     {struct_declarations.u1.a a 0 int}
    201     {struct_declarations.u1.b b 1 {char \*}}
    202     {struct_declarations.u1.c c 0 {long}}
    203     {struct_declarations.u1.d d 0 {enum foo}}
    204 } "get children of struct_declarations.u1"
    205 
    206 # Test: c_variable-4.24
    207 # Desc: number of children of struct_declarations.u1
    208 mi_gdb_test "-var-info-num-children struct_declarations.u1" \
    209 	"\\^done,numchild=\"4\"" \
    210 	"get number of children of struct_declarations.u1"
    211 
    212 # Test: c_variable-4.25
    213 # Desc: children of struct_declarations.s2
    214 mi_list_varobj_children "struct_declarations.s2" {
    215     {struct_declarations.s2.u2 u2 3 {union \{\.\.\.\}}}
    216     {struct_declarations.s2.g g 0 int}
    217     {struct_declarations.s2.h h 0 char}
    218     {struct_declarations.s2.i i 10 {long \[10\]}}
    219 } "get children of struct_declarations.s2"
    220 
    221 #gdbtk_test c_variable-4.25 {children of struct_declarations.s2} {
    222 #  get_children struct_declarations.s2
    223 #} {u2 g h i}
    224 
    225 # Test: c_variable-4.26
    226 # Desc: number of children of struct_declarations.s2
    227 mi_gdb_test "-var-info-num-children struct_declarations.s2" \
    228 	"\\^done,numchild=\"4\"" \
    229 	"get number of children of struct_declarations.s2"
    230 
    231 
    232 for {set i 1} {$i <= 9} {incr i} {
    233     mi_list_varobj_children "struct_declarations.long_array.$i" {} \
    234 	"get children of struct_declarations.long_array.$i"
    235 
    236     mi_gdb_test "-var-info-num-children struct_declarations.long_array.$i" \
    237 	"\\^done,numchild=\"0\"" \
    238 	"get number of children of struct_declarations.long_array.$i"
    239 }
    240 
    241 # Test: c_variable-4.45
    242 # Desc: children of struct_declarations.u1.a
    243 mi_list_varobj_children "struct_declarations.u1.a" {} \
    244 	"get children of struct_declarations.u1.a"
    245 
    246 # Test: c_variable-4.46
    247 # Desc: number of children of struct_declarations.u1.a
    248 mi_gdb_test "-var-info-num-children struct_declarations.u1.a" \
    249 	"\\^done,numchild=\"0\"" \
    250 	"get number of children of struct_declarations.u1.a"
    251 
    252 # Test: c_variable-4.47
    253 # Desc: children of struct_declarations.u1.b
    254 mi_list_varobj_children "struct_declarations.u1.b" {
    255     {{struct_declarations.u1.b.\*b} {\*b} 0 char}
    256 } "get children of struct_declarations.u1.b"
    257 
    258 # Test: c_variable-4.48
    259 # Desc: number of children of struct_declarations.u1.b
    260 mi_gdb_test "-var-info-num-children struct_declarations.u1.b" \
    261 	"\\^done,numchild=\"1\"" \
    262 	"get number of children of struct_declarations.u1.b"
    263 
    264 # Test: c_variable-4.49
    265 # Desc: children of struct_declarations.u1.c
    266 mi_list_varobj_children "struct_declarations.u1.c" {} \
    267 	"get children of struct_declarations.u1.c"
    268 
    269 # Test: c_variable-4.50
    270 # Desc: number of children of struct_declarations.u1.c
    271 mi_gdb_test "-var-info-num-children struct_declarations.u1.c" \
    272 	"\\^done,numchild=\"0\"" \
    273 	"get number of children of struct_declarations.u1.c"
    274 
    275 # Test: c_variable-4.51
    276 # Desc: children of struct_declarations.u1.d
    277 mi_list_varobj_children "struct_declarations.u1.d" {} \
    278 	"get children of struct_declarations.u1.d"
    279 
    280 
    281 # Test: c_variable-4.52
    282 # Desc: number of children of struct_declarations.u1.d
    283 mi_gdb_test "-var-info-num-children struct_declarations.u1.d" \
    284 	"\\^done,numchild=\"0\"" \
    285 	"get number of children of struct_declarations.u1.d"
    286 
    287 
    288 # Test: c_variable-4.53
    289 # Desc: children of struct_declarations.s2.u2
    290 mi_list_varobj_children "struct_declarations.s2.u2" {
    291     {"struct_declarations.s2.u2.u1s1" "u1s1" 4 {struct \{\.\.\.\}}}
    292     {struct_declarations.s2.u2.f f 0 "long"}
    293     {struct_declarations.s2.u2.u1s2 u1s2 2 {struct \{\.\.\.\}}}
    294 } "get children of struct_declarations.s2.u2"
    295 
    296 # Test: c_variable-4.54
    297 # Desc: number of children of struct_declarations.s2.u2
    298 mi_gdb_test "-var-info-num-children struct_declarations.s2.u2" \
    299 	"\\^done,numchild=\"3\"" \
    300 	"get number of children of struct_declarations.s2.u2"
    301 
    302 # Test: c_variable-4.55
    303 # Desc: children of struct_declarations.s2.g
    304 mi_list_varobj_children struct_declarations.s2.g {} \
    305 	"get children of struct_declarations.s2.g"
    306 
    307 # Test: c_variable-4.56
    308 # Desc: number of children of struct_declarations.s2.g
    309 mi_gdb_test "-var-info-num-children struct_declarations.s2.g" \
    310 	"\\^done,numchild=\"0\"" \
    311 	"get number of children of struct_declarations.s2.g"
    312 
    313 
    314 # Test: c_variable-4.57
    315 # Desc: children of struct_declarations.s2.h
    316 mi_list_varobj_children struct_declarations.s2.h {} \
    317 	"get children of struct_declarations.s2.h"
    318 
    319 # Test: c_variable-4.58
    320 # Desc: number of children of struct_declarations.s2.h
    321 mi_gdb_test "-var-info-num-children struct_declarations.s2.h" \
    322 	"\\^done,numchild=\"0\"" \
    323 	"get number of children of struct_declarations.s2.h"
    324 
    325 
    326 # Test: c_variable-4.59
    327 # Desc: children of struct_declarations.s2.i
    328 set t {}
    329 for {set i 0} {$i < 10} {incr i} {
    330     lappend t [list struct_declarations.s2.i.$i $i 0 "long"]
    331 }
    332 mi_list_varobj_children struct_declarations.s2.i $t \
    333 	"get children of struct_declarations.s2.i"
    334 
    335 # Test: c_variable-4.60
    336 # Desc: number of children of struct_declarations.s2.i
    337 mi_gdb_test "-var-info-num-children struct_declarations.s2.i" \
    338 	"\\^done,numchild=\"10\"" \
    339 	"get number of children of struct_declarations.s2.i"
    340 
    341 # Test: c_variable-4.61
    342 # Desc: children of struct_declarations.s2.u2.u1s1
    343 mi_list_varobj_children struct_declarations.s2.u2.u1s1 {
    344     {struct_declarations.s2.u2.u1s1.d d 0 int}
    345     {struct_declarations.s2.u2.u1s1.e e 10 {char \[10\]}}
    346     {struct_declarations.s2.u2.u1s1.func func 0 {int \*\(\*\)\((void)?\)}}
    347     {struct_declarations.s2.u2.u1s1.foo foo 0 efoo}
    348 } "get children of struct_declarations.s2.u2.u1s1"
    349 
    350 # Test: c_variable-4.62
    351 # Desc: number of children of struct_declarations.s2.u2.u1s1
    352 mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s1" \
    353 	"\\^done,numchild=\"4\"" \
    354 	"get number of children of struct_declarations.s2.u2.u1s1"
    355 
    356 # Test: c_variable-4.63
    357 # Desc: children of struct_declarations.s2.u2.f
    358 mi_list_varobj_children struct_declarations.s2.u2.f {} \
    359 	"get children of struct_declarations.s2.u2.f"
    360 
    361 # Test: c_variable-4.64
    362 # Desc: number of children of struct_declarations.s2.u2.f
    363 mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.f" \
    364 	"\\^done,numchild=\"0\"" \
    365 	"get number of children of struct_declarations.s2.u2.f"
    366 
    367 # Test: c_variable-4.65
    368 # Desc: children of struct_declarations.s2.u2.u1s2
    369 mi_list_varobj_children struct_declarations.s2.u2.u1s2 {
    370     {struct_declarations.s2.u2.u1s2.array_ptr array_ptr 2 {char \[2\]}}
    371     {struct_declarations.s2.u2.u1s2.func func 0 {int \(\*\)\((int, char \*)?\)}}
    372 } "get children of struct_declarations.s2.u2.u1s2"
    373 
    374 # Test: c_variable-4.66
    375 # Desc: number of children of struct_declarations.s2.u2.u1s2
    376 mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s2" \
    377 	"\\^done,numchild=\"2\"" \
    378 	"get number of children of struct_declarations.s2.u2.u1s2"
    379 
    380 # Test: c_variable-4.67
    381 # Desc: children of struct_declarations.s2.u2.u1s1.d
    382 mi_list_varobj_children struct_declarations.s2.u2.u1s1.d {} \
    383 	"get children of struct_declarations.s2.u2.u1s1.d"
    384 
    385 # Test: c_variable-4.68
    386 # Desc: number of children of struct_declarations.s2.u2.u1s1.d
    387 mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s1.d" \
    388 	"\\^done,numchild=\"0\"" \
    389 	"get number of children of struct_declarations.s2.u2.u1s1.d"
    390 
    391 # Test: c_variable-4.69
    392 # Desc: children of struct_declarations.s2.u2.u1s1.e
    393 set t {}
    394 for {set i 0} {$i < 10} {incr i} {
    395     lappend t [list struct_declarations.s2.u2.u1s1.e.$i $i 0 char]
    396 }
    397 mi_list_varobj_children struct_declarations.s2.u2.u1s1.e $t \
    398 	"get children of struct_declarations.s2.u2.u1s1.e"
    399 
    400 # Test: c_variable-4.70
    401 # Desc: number of children of struct_declarations.s2.u2.u1s1.e
    402 mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s1.e" \
    403 	"\\^done,numchild=\"10\"" \
    404 	"get number of children of struct_declarations.s2.u2.u1s1.e"
    405 
    406 
    407 # Test: c_variable-4.71
    408 # Desc: children of struct_declarations.s2.u2.u1s1.func
    409 mi_list_varobj_children struct_declarations.s2.u2.u1s1.func {} \
    410 	"get children of struct_declarations.s2.u2.u1s1.func"
    411 
    412 # Test: c_variable-4.72
    413 # Desc: number of children of struct_declarations.s2.u2.u1s1.func
    414 mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s1.func" \
    415 	"\\^done,numchild=\"0\"" \
    416 	"get number of children of struct_declarations.s2.u2.u1s1.func"
    417 
    418 
    419 # Test: c_variable-4.73
    420 # Desc: children of struct_declarations.s2.u2.u1s1.foo
    421 mi_list_varobj_children struct_declarations.s2.u2.u1s1.foo {} \
    422 	"get children of struct_declarations.s2.u2.u1s1.foo"
    423 
    424 # Test: c_variable-4.74
    425 # Desc: number of children of struct_declarations.s2.u2.u1s1.foo
    426 mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s1.foo" \
    427 	"\\^done,numchild=\"0\"" \
    428 	"get number of children of struct_declarations.s2.u2.u1s1.foo"
    429 
    430 
    431 # Test: c_variable-4.75
    432 # Desc: children of struct_declarations.s2.u2.u1s2.array_ptr
    433 mi_list_varobj_children struct_declarations.s2.u2.u1s2.array_ptr {
    434     {struct_declarations.s2.u2.u1s2.array_ptr.0 0 0 char}
    435     {struct_declarations.s2.u2.u1s2.array_ptr.1 1 0 char}
    436 } "get children of struct_declarations.s2.u2.u1s2.array_ptr"
    437 
    438 # Test: c_variable-4.76
    439 # Desc: number of children of struct_declarations.s2.u2.u1s2.array_ptr
    440 mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s2.array_ptr" \
    441 	"\\^done,numchild=\"2\"" \
    442 	"get number of children of struct_declarations.s2.u2.u1s2.array_ptr"
    443 
    444 # Test: c_variable-4.77
    445 # Desc: children of struct_declarations.s2.u2.u1s2.func
    446 mi_list_varobj_children struct_declarations.s2.u2.u1s2.func {} \
    447 	"get children of struct_declarations.s2.u2.u1s2.func"
    448 
    449 # Test: c_variable-4.78
    450 # Desc: number of children of struct_declarations.s2.u2.u1s2.func
    451 mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s2.func" \
    452 	"\\^done,numchild=\"0\"" \
    453 	"get number of children of struct_declarations.s2.u2.u1s2.func"
    454 
    455 # Test: c_variable-4.79
    456 # Desc: children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
    457 mi_list_varobj_children "struct_declarations.int_ptr_ptr.*int_ptr_ptr" {
    458     {{struct_declarations.int_ptr_ptr.\*int_ptr_ptr.\*\*int_ptr_ptr} \
    459          {\*\*int_ptr_ptr} 0 int}
    460 } "get children of struct_declarations.int_ptr_ptr.*int_ptr_ptr"
    461 
    462 # Test: c_variable-4.80
    463 # Desc: Number of children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
    464 mi_gdb_test "-var-info-num-children struct_declarations.int_ptr_ptr.*int_ptr_ptr" \
    465 	"\\^done,numchild=\"1\"" \
    466 	"get number of children of struct_declarations.int_ptr_ptr.*int_ptr_ptr"
    467 
    468 
    469 # Step to "struct_declarations.integer = 123;"
    470 set line_dct_123 [gdb_get_line_number "struct_declarations.integer = 123;"]
    471 mi_step_to do_children_tests {} ".*${srcfile}" \
    472       $line_dct_123 "step to line \$line_dct_123"
    473 
    474 # Test: c_variable-4.81
    475 # Desc: create local variable "weird"
    476 mi_create_varobj weird weird "create local variable weird"
    477 
    478 # Test: c_variable-4.82
    479 # Desc: children of weird
    480 mi_list_varobj_children "weird" {
    481     {weird.integer integer 0 int}
    482     {weird.character character 0 char}
    483     {weird.char_ptr char_ptr 1 "char \\*"}
    484     {weird.long_int long_int 0 "long"}
    485     {weird.int_ptr_ptr int_ptr_ptr 1 "int \\*\\*"}
    486     {weird.long_array long_array 12 "long \\[12\\]"}
    487     {weird.func_ptr func_ptr 0 "void \\(\\*\\)\\((void)?\\)"}
    488     {weird.func_ptr_struct func_ptr_struct 0 \
    489          "struct _struct_decl \\(\\*\\)(\\(int, char \\*, long\\))?"}
    490     {weird.func_ptr_ptr func_ptr_ptr 0 \
    491         "struct _struct_decl \\*\\(\\*\\)\\((int, char \\*, long)?\\)"}
    492     {weird.u1 u1 4 "union \\{\\.\\.\\.\\}"}
    493     {weird.s2 s2 4 "struct \\{\\.\\.\\.\\}"}
    494 } "get children of weird"
    495 
    496 # Test: c_variable-4.83
    497 # Desc: number of children of weird
    498 mi_gdb_test "-var-info-num-children weird" \
    499 	"\\^done,numchild=\"11\"" \
    500 	"get number of children of weird"
    501 
    502 
    503 # Test: c_variable-4.84
    504 # Desc: children of weird->long_array
    505 mi_list_array_varobj_children weird.long_array 12 "long" \
    506 	"get children of weird.long_array"
    507 #gdbtk_test c_variable-4.84 {children of weird->long_array} {
    508 #  get_children weird.long_array
    509 #} {0 1 2 3 4 5 6 7 8 9 10 11}
    510 
    511 # Test: c_variable-4.85
    512 # Desc: number of children of weird.long_array
    513 mi_gdb_test "-var-info-num-children weird.long_array" \
    514 	"\\^done,numchild=\"12\"" \
    515 	"get number of children of weird.long_array"
    516 
    517 # Test: c_variable-4.86
    518 # Desc: children of weird.int_ptr_ptr
    519 mi_list_varobj_children weird.int_ptr_ptr {
    520     {{weird.int_ptr_ptr.\*int_ptr_ptr} {\*int_ptr_ptr} 1 {int \*}}
    521 } "get children of weird.int_ptr_ptr"
    522 #gdbtk_test c_variable-4.86 {children of weird->int_ptr_ptr} {
    523 #  get_children weird.int_ptr_ptr
    524 #} {*int_ptr_ptr}
    525 
    526 # Test: c_variable-4.87
    527 # Desc: number of children of weird.int_ptr_ptr
    528 mi_gdb_test "-var-info-num-children weird.int_ptr_ptr" \
    529 	"\\^done,numchild=\"1\"" \
    530 	"get number of children of weird.int_ptr_ptr"
    531 
    532 # Test: c_variable-4.88
    533 # Desc: children of *weird->int_ptr_ptr
    534 mi_list_varobj_children "weird.int_ptr_ptr.*int_ptr_ptr" {
    535     {{weird.int_ptr_ptr.\*int_ptr_ptr.\*\*int_ptr_ptr} {\*\*int_ptr_ptr} 0 "int"}
    536 } "get children of weird.int_ptr_ptr.*int_ptr_ptr"
    537 #gdbtk_test c_variable-4.88 {children of *weird->int_ptr_ptr} {
    538 #  get_children weird.int_ptr_ptr.*int_ptr_ptr
    539 #} {**int_ptr_ptr}
    540 
    541 # Test: c_variable-4.89
    542 # Desc: number of children *weird->int_ptr_ptr
    543 mi_gdb_test "-var-info-num-children weird.int_ptr_ptr.*int_ptr_ptr" \
    544 	"\\^done,numchild=\"1\"" \
    545 	"get number of children of weird.int_ptr_ptr.*int_ptr_ptr"
    546 
    547 # Test: c_variable-4.90
    548 # Desc: create weird->int_ptr_ptr
    549 mi_create_varobj "weird->int_ptr_ptr" "weird->int_ptr_ptr" \
    550 	"create local variable weird->int_ptr_ptr"
    551 
    552 # Test: c_variable-4.91
    553 # Desc: children of weird->int_ptr_ptr
    554 mi_list_varobj_children "weird->int_ptr_ptr" {
    555     {{weird->int_ptr_ptr.\*weird->int_ptr_ptr} {\*weird->int_ptr_ptr} 1 {int \*}}
    556 } "get children of weird->int_ptr_ptr"
    557 
    558 # Test: c_variable-4.92
    559 # Desc: number of children of (weird->int_ptr_ptr)
    560 mi_gdb_test "-var-info-num-children weird->int_ptr_ptr" \
    561 	"\\^done,numchild=\"1\"" \
    562 	"get number of children of weird->int_ptr_ptr"
    563 
    564 # Test: c_variable-4.93
    565 # Desc: children of *(weird->int_ptr_ptr)
    566 mi_list_varobj_children "weird->int_ptr_ptr.*weird->int_ptr_ptr" {
    567     {{weird->int_ptr_ptr.\*weird->int_ptr_ptr.\*\*weird->int_ptr_ptr} \
    568          {\*\*weird->int_ptr_ptr} 0 int}
    569 } "get children of weird->int_ptr_ptr.*weird->int_ptr_ptr"
    570 
    571 # Test: c_variable-4.94
    572 # Desc: number of children of *(weird->int_ptr_ptr)
    573 mi_gdb_test "-var-info-num-children weird->int_ptr_ptr.*weird->int_ptr_ptr" \
    574 	"\\^done,numchild=\"1\"" \
    575 	"get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr"
    576 
    577 # Test: c_variable-4.95
    578 # Desc: children of *(*(weird->int_ptr_ptr))
    579 mi_list_varobj_children "weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr" {} \
    580 	"get children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr"
    581 
    582 # Test: c_variable-4.96
    583 # Desc: number of children of *(*(weird->int_ptr_ptr))
    584 mi_list_varobj_children "weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr" {} \
    585 	"get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr"
    586 
    587 # Test: c_variable-4.97
    588 # Desc: is weird editable
    589 mi_gdb_test "-var-show-attributes weird" \
    590 	"\\^done,attr=\"editable\"" \
    591 	"is weird editable"
    592 
    593 # Test: c_variable-4.98
    594 # Desc: is weird->int_ptr_ptr editable
    595 mi_gdb_test "-var-show-attributes weird->int_ptr_ptr" \
    596 	"\\^done,attr=\"editable\"" \
    597 	"is weird->int_ptr_ptr editable"
    598 
    599 # Test: c_variable-4.99
    600 # Desc: is *(weird->int_ptr_ptr) editable
    601 mi_gdb_test "-var-show-attributes weird.int_ptr_ptr.*int_ptr_ptr" \
    602 	"\\^done,attr=\"editable\"" \
    603 	"is weird.int_ptr_ptr.*int_ptr_ptr editable"
    604 
    605 # Test: c_variable-4.100
    606 # Desc: is *(*(weird->int_ptr_ptr)) editable
    607 mi_gdb_test "-var-show-attributes weird.int_ptr_ptr.*int_ptr_ptr.**int_ptr_ptr" \
    608 	"\\^done,attr=\"editable\"" \
    609 	"is weird.int_ptr_ptr.*int_ptr_ptr.**int_ptr_ptr editable"
    610 
    611 # Test: c_variable-4.101
    612 # Desc: is weird->u1 editable
    613 mi_gdb_test "-var-show-attributes weird.u1" \
    614 	"\\^done,attr=\"noneditable\"" \
    615 	"is weird.u1 editable"
    616 
    617 # Test: c_variable-4.102
    618 # Desc: is weird->s2 editable
    619 mi_gdb_test "-var-show-attributes weird.s2" \
    620 	"\\^done,attr=\"noneditable\"" \
    621 	"is weird.s2 editable"
    622 
    623 # Test: c_variable-4.103
    624 # Desc: is struct_declarations.u1.a editable
    625 mi_gdb_test "-var-show-attributes struct_declarations.u1.a" \
    626 	"\\^done,attr=\"editable\"" \
    627 	"is struct_declarations.u1.a editable"
    628 
    629 # Test: c_variable-4.104
    630 # Desc: is struct_declarations.u1.b editable
    631 mi_gdb_test "-var-show-attributes struct_declarations.u1.b" \
    632 	"\\^done,attr=\"editable\"" \
    633 	"is struct_declarations.u1.b editable"
    634 
    635 # Test: c_variable-4.105
    636 # Desc: is struct_declarations.u1.c editable
    637 mi_gdb_test "-var-show-attributes struct_declarations.u1.c" \
    638 	"\\^done,attr=\"editable\"" \
    639 	"is struct_declarations.u1.c editable"
    640 
    641 # Test: c_variable-4.106
    642 # Desc: is struct_declarations.long_array editable
    643 mi_gdb_test "-var-show-attributes struct_declarations.long_array" \
    644 	"\\^done,attr=\"noneditable\"" \
    645 	"is struct_declarations.long_array editable"
    646 
    647 # Test: c_variable-4.107
    648 # Desc: is struct_declarations.long_array[0] editable
    649 mi_gdb_test "-var-show-attributes struct_declarations.long_array.0" \
    650 	"\\^done,attr=\"editable\"" \
    651 	"is struct_declarations.long_array.0 editable"
    652 
    653 # Test: c_variable-4.108
    654 # Desc: is struct_declarations editable
    655 mi_gdb_test "-var-show-attributes struct_declarations" \
    656 	"\\^done,attr=\"noneditable\"" \
    657 	"is struct_declarations editable"
    658 
    659 mi_gdb_test "-var-delete weird" \
    660 	"\\^done,ndeleted=\"26\"" \
    661 	"delete var weird"
    662 
    663 #####                         #####
    664 #                                 #
    665 # children and update tests #
    666 #                                 #
    667 #####                         #####
    668 
    669 # Test: c_variable-5.1
    670 # Desc: check that nothing changed
    671 mi_varobj_update * {} "update all vars. None changed"
    672 
    673 # Step over "struct_declarations.integer = 123;"
    674 mi_step_to do_children_tests {} ".*${srcfile}" \
    675     [expr $line_dct_123 + 1] "step \$line_dct_123 + 1"
    676 
    677 # Test: c_variable-5.2
    678 # Desc: check that integer changed
    679 mi_varobj_update * {struct_declarations.integer} \
    680 	"update all vars struct_declarations.integer"
    681 
    682 # Step over:
    683 #    weird->char_ptr = "hello";
    684 #    bar = 2121;
    685 #    foo = &bar;
    686 mi_execute_to "exec-step 3" "end-stepping-range" do_children_tests {} ".*${srcfile}" \
    687     [expr $line_dct_123 + 4] {} "step \$line_dct_123 + 4"
    688 
    689 # Test: c_variable-5.3
    690 # Desc: check that char_ptr changed
    691 mi_varobj_update * {struct_declarations.char_ptr struct_declarations.char_ptr.\\*char_ptr} \
    692 	"update all vars struct_declarations.char_ptr"
    693 
    694 # Step over "struct_declarations.int_ptr_ptr = &foo;"
    695 mi_step_to do_children_tests {} ".*${srcfile}" \
    696     [expr $line_dct_123 + 5] "step \$line_dct_123 + 5"
    697 
    698 # Test: c_variable-5.4
    699 # Desc: check that int_ptr_ptr and children changed
    700 mi_varobj_update * {weird->int_ptr_ptr
    701     weird->int_ptr_ptr.\\*weird->int_ptr_ptr
    702     weird->int_ptr_ptr.\\*weird->int_ptr_ptr.\\*\\*weird->int_ptr_ptr
    703     struct_declarations.int_ptr_ptr
    704     struct_declarations.int_ptr_ptr.\\*int_ptr_ptr
    705     struct_declarations.int_ptr_ptr.\\*int_ptr_ptr.\\*\\*int_ptr_ptr} \
    706 	"update all vars int_ptr_ptr and children changed"
    707 
    708 # Step over "weird->long_array[0] = 1234;"
    709 mi_step_to do_children_tests {} ".*${srcfile}" \
    710     [expr $line_dct_123 + 6] "step \$line_dct_123 + 6"
    711 
    712 # Test: c_variable-5.5
    713 # Desc: check that long_array[0] changed
    714 mi_varobj_update * {struct_declarations.long_array.0} \
    715 	"update all vars struct_declarations.long_array.0 changed"
    716 
    717 # Step over "struct_declarations.long_array[1] = 2345;"
    718 mi_step_to do_children_tests {} ".*${srcfile}" \
    719     [expr $line_dct_123 + 7] "step \$line_dct_123 + 7"
    720 
    721 # Test: c_variable-5.6
    722 # Desc: check that long_array[1] changed
    723 mi_varobj_update * {struct_declarations.long_array.1} \
    724 	"update all vars struct_declarations.long_array.1 changed"
    725 
    726 # Step over "weird->long_array[2] = 3456;"
    727 mi_step_to do_children_tests {} ".*${srcfile}" \
    728     [expr $line_dct_123 + 8] "step \$line_dct_123 + 8"
    729 
    730 # Test: c_variable-5.7
    731 # Desc: check that long_array[2] changed
    732 mi_varobj_update * {struct_declarations.long_array.2} \
    733 	"update all vars struct_declarations.long_array.2 changed"
    734 
    735 # Step over:
    736 #    struct_declarations.long_array[3] = 4567;
    737 #    weird->long_array[4] = 5678;
    738 #    struct_declarations.long_array[5] = 6789;
    739 #    weird->long_array[6] = 7890;
    740 #    struct_declarations.long_array[7] = 8901;
    741 #    weird->long_array[8] = 9012;
    742 #    struct_declarations.long_array[9] = 1234;
    743 
    744 set line_dct_nothing [gdb_get_line_number "weird->func_ptr = nothing;"]
    745 mi_execute_to "exec-step 7" "end-stepping-range" do_children_tests {} ".*${srcfile}" \
    746     $line_dct_nothing {} "step \$line_dct_nothing"
    747 
    748 # Test: c_variable-5.8
    749 # Desc: check that long_array[3-9] changed
    750 mi_varobj_update * {struct_declarations.long_array.3
    751     struct_declarations.long_array.4
    752     struct_declarations.long_array.5
    753     struct_declarations.long_array.6
    754     struct_declarations.long_array.7
    755     struct_declarations.long_array.8
    756     struct_declarations.long_array.9} \
    757     "update all vars struct_declarations.long_array.3-9 changed"
    758 
    759 
    760 # Step over "weird->func_ptr = nothing";
    761 mi_step_to do_children_tests {} ".*${srcfile}" \
    762     [expr $line_dct_nothing + 1] "step \$line_dct_nothing + 1"
    763 
    764 # Test: c_variable-5.9
    765 # Desc: check that func_ptr changed
    766 mi_varobj_update * {struct_declarations.func_ptr} \
    767     "update all vars struct_declarations.func_ptr changed"
    768 
    769 # Step over "weird->func_ptr_struct = nothing1"
    770 mi_step_to do_children_tests {} ".*${srcfile}" \
    771     [expr $line_dct_nothing + 2] "step \$line_dct_nothing + 2"
    772 mi_varobj_update * {struct_declarations.func_ptr_struct} \
    773     "update all vars struct_declarations.func_ptr_struct changed"
    774 
    775 # Step over "weird->func_ptr_ptr = nothing2"
    776 mi_step_to do_children_tests {} ".*${srcfile}" \
    777     [expr $line_dct_nothing + 3] "step \$line_dct_nothing + 3"
    778 mi_varobj_update * {struct_declarations.func_ptr_ptr} \
    779     "update all vars struct_declarations.func_ptr_ptr changed"
    780 
    781 # Step over "struct_declarations.long_array[10] = 3456";
    782 mi_step_to do_children_tests {} ".*${srcfile}" \
    783     [expr $line_dct_nothing + 4] "step \$line_dct_nothing + 4"
    784 
    785 mi_gdb_test "-var-update --no-values *" \
    786 	"\\^done,changelist=\\\[\{name=\"struct_declarations.long_array.10\",in_scope=\"true\",type_changed=\"false\",has_more=\"0\"\}\\\]" \
    787  "update all vars struct_declarations.long_array.10 changed, don't print values."
    788 
    789 # Step over "struct_declarations.long_array[11] = 5678";
    790 set line_dct_a0_0 [gdb_get_line_number "a0\[0\] = '0';"]
    791 mi_step_to  do_children_tests {} ".*${srcfile}" \
    792     $line_dct_a0_0 "step \$line_dct_a0_0"
    793 
    794 mi_gdb_test "-var-update --all-values *" \
    795 	"\\^done,changelist=\\\[\{name=\"struct_declarations.long_array.11\",value=\"5678\",in_scope=\"true\",type_changed=\"false\",has_more=\"0\"\}\\\]" \
    796  "update all vars struct_declarations.long_array.11 changed, print values."
    797 
    798 mi_list_varobj_children {struct_declarations.long_array --all-values} {
    799     {struct_declarations.long_array.0 0 0 "long" 1234}
    800     {struct_declarations.long_array.1 1 0 "long" 2345}
    801     {struct_declarations.long_array.2 2 0 "long" 3456}
    802     {struct_declarations.long_array.3 3 0 "long" 4567}
    803     {struct_declarations.long_array.4 4 0 "long" 5678}
    804     {struct_declarations.long_array.5 5 0 "long" 6789}
    805     {struct_declarations.long_array.6 6 0 "long" 7890}
    806     {struct_declarations.long_array.7 7 0 "long" 8901}
    807     {struct_declarations.long_array.8 8 0 "long" 9012}
    808     {struct_declarations.long_array.9 9 0 "long" 1234}
    809     {struct_declarations.long_array.10 10 0 "long" 3456}
    810     {struct_declarations.long_array.11 11 0 "long" 5678}
    811 } "listing of names and values of children"
    812 
    813 mi_list_varobj_children {struct_declarations --simple-values} \
    814     [list \
    815          {struct_declarations.integer integer 0 int 123} \
    816          {struct_declarations.character character 0 char {0 '\\\\000'}} \
    817          [list struct_declarations.char_ptr char_ptr 1 "char \\*" "$hex \\\\\"hello\\\\\""] \
    818          {struct_declarations.long_int long_int 0 "long" 0} \
    819          [list struct_declarations.int_ptr_ptr int_ptr_ptr 1 "int \\*\\*" "$hex"] \
    820          {struct_declarations.long_array long_array 12 "long \\[12\\]"} \
    821          [list struct_declarations.func_ptr func_ptr 0 "void \\(\\*\\)\\((void)?\\)" "(@$hex: |)$hex <nothing>"] \
    822          [list struct_declarations.func_ptr_struct func_ptr_struct 0 \
    823               "struct _struct_decl \\(\\*\\)(\\(int, char \\*, long\\))?" "$hex <nothing1>"] \
    824          [list struct_declarations.func_ptr_ptr func_ptr_ptr 0 \
    825               "struct _struct_decl \\*\\(\\*\\)\\((int, char \\*, long)?\\)" "$hex <nothing2>"] \
    826          {struct_declarations.u1 u1 4 "union \\{\\.\\.\\.\\}"} \
    827          {struct_declarations.s2 s2 4 "struct \\{\\.\\.\\.\\}"} \
    828 ] "listing of children, simple types: names, type and values, complex types: names and types"
    829 
    830 # Delete all variables
    831 mi_gdb_test "-var-delete struct_declarations" \
    832 	"\\^done,ndeleted=\"67\"" \
    833 	"delete var struct_declarations"
    834 
    835 mi_gdb_test "-var-delete weird->int_ptr_ptr" \
    836 	"\\^done,ndeleted=\"3\"" \
    837 	"delete var weird->int_ptr_ptr"
    838 
    839 # Step over all lines:
    840 # ...
    841 #   psnp = &snp0;
    842 
    843 set line_dct_snp0 [gdb_get_line_number "psnp = &snp0;"]
    844 mi_execute_to "exec-step 43" "end-stepping-range" do_children_tests {} ".*${srcfile}" \
    845     [expr $line_dct_snp0 + 1] {} "step \$line_dct_snp0 + 1"
    846 
    847 # Test: c_variable-5.10
    848 # Desc: create psnp->char_ptr
    849 mi_create_varobj "psnp->char_ptr" "psnp->char_ptr" \
    850 	"create local variable  psnp->char_ptr"
    851 
    852 # Test: c_variable-5.11
    853 # Desc: children of psnp->char_ptr
    854 mi_list_varobj_children "psnp->char_ptr" {
    855     {{psnp->char_ptr.\*psnp->char_ptr} {\*psnp->char_ptr} 1  {char \*\*\*}}
    856 } "get children of psnp->char_ptr"
    857 
    858 # Test: c_variable-5.12
    859 # Desc: number of children of psnp->char_ptr
    860 mi_gdb_test "-var-info-num-children psnp->char_ptr" \
    861 	"\\^done,numchild=\"1\"" \
    862 	"get number of children of psnp->char_ptr"
    863 
    864 # Test: c_variable-5.13
    865 # Desc: children of *(psnp->char_ptr)
    866 mi_list_varobj_children "psnp->char_ptr.*psnp->char_ptr" {
    867     {{psnp->char_ptr.\*psnp->char_ptr.\*\*psnp->char_ptr} \
    868          {\*\*psnp->char_ptr} 1 {char \*\*}}
    869 } "get children of psnp->char_ptr.*psnp->char_ptr"
    870 
    871 # Test: c_variable-5.14
    872 # Desc: number of children of *(psnp->char_ptr)
    873 mi_gdb_test "-var-info-num-children psnp->char_ptr.*psnp->char_ptr" \
    874 	"\\^done,numchild=\"1\"" \
    875 	"get number of children of psnp->char_ptr.*psnp->char_ptr"
    876 
    877 # Test: c_variable-5.15
    878 # Desc: children of *(*(psnp->char_ptr))
    879 mi_list_varobj_children "psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr" {
    880     {{psnp->char_ptr.\*psnp->char_ptr.\*\*psnp->char_ptr.\*\*\*psnp->char_ptr} \
    881          {\*\*\*psnp->char_ptr} 1 {char \*}}
    882 } "get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr"
    883 
    884 # Test: c_variable-5.15B
    885 # Desc: children of *(*(*(psnp->char_ptr)))
    886 mi_list_varobj_children "psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr" {
    887     {{psnp->char_ptr.\*psnp->char_ptr.\*\*psnp->char_ptr.\*\*\*psnp->char_ptr.\*\*\*\*psnp->char_ptr} \
    888          {\*\*\*\*psnp->char_ptr} 0 char}
    889 } "get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr"
    890 
    891 # Test: c_variable-5.16
    892 # Desc: number of children of *(*(psnp->char_ptr))
    893 mi_gdb_test "-var-info-num-children psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr" \
    894 	"\\^done,numchild=\"1\"" \
    895 	"get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr"
    896 
    897 # Test: c_variable-5.17
    898 # Desc: children of *(*(*(psnp->char_ptr)))
    899 mi_list_varobj_children "psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr" {
    900     {{psnp->char_ptr.\*psnp->char_ptr.\*\*psnp->char_ptr.\*\*\*psnp->char_ptr.\*\*\*\*psnp->char_ptr} \
    901          {\*\*\*\*psnp->char_ptr} 0 char}
    902 } "get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr"
    903 
    904 # Test: c_variable-5.18
    905 # Desc: number of children of *(*(*(psnp->char_ptr)))
    906 mi_gdb_test "-var-info-num-children psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr" \
    907 	"\\^done,numchild=\"1\"" \
    908 	"get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr"
    909 
    910 # Test: c_variable-5.17B
    911 # Desc: children of *(*(*(*(psnp->char_ptr))))
    912 mi_list_varobj_children "psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr" {} \
    913 	"get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr"
    914 
    915 # Test: c_variable-5.18B
    916 # Desc: number of children of *(*(*(*(psnp->char_ptr))))
    917 mi_gdb_test "-var-info-num-children psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr" \
    918 	"\\^done,numchild=\"0\"" \
    919 	"get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr"
    920 
    921 # Test: c_variable-5.19
    922 # Desc: create psnp->long_ptr
    923 mi_create_varobj "psnp->long_ptr" "psnp->long_ptr" \
    924 	"create local variable  psnp->long_ptr"
    925 
    926 # Test: c_variable-5.20
    927 # Desc: children of psnp->long_ptr
    928 mi_list_varobj_children "psnp->long_ptr" {
    929     {{psnp->long_ptr.\*psnp->long_ptr} {\*psnp->long_ptr} 1 {long \*\*\*}}
    930 } "get children of psnp->long_ptr"
    931 
    932 # Test: c_variable-5.21
    933 # Desc: number of children of psnp->long_ptr
    934 mi_gdb_test "-var-info-num-children psnp->long_ptr" \
    935 	"\\^done,numchild=\"1\"" \
    936 	"get number of children of psnp->long_ptr"
    937 
    938 # Test: c_variable-5.22
    939 # Desc: children of *(psnp->long_ptr)
    940 mi_list_varobj_children "psnp->long_ptr.*psnp->long_ptr" {
    941     {{psnp->long_ptr.\*psnp->long_ptr.\*\*psnp->long_ptr} {\*\*psnp->long_ptr} 1 {long \*\*}}
    942 } "get children of psnp->long_ptr.*psnp->long_ptr"
    943 
    944 
    945 # Test: c_variable-5.23
    946 # Desc: number of children of *(psnp->long_ptr)
    947 mi_gdb_test "-var-info-num-children psnp->long_ptr.*psnp->long_ptr" \
    948 	"\\^done,numchild=\"1\"" \
    949 	"get number of children of psnp->long_ptr.*psnp->long_ptr"
    950 
    951 # Test: c_variable-5.24
    952 # Desc: children of *(*(psnp->long_ptr))
    953 mi_list_varobj_children "psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr" {
    954     {{psnp->long_ptr.\*psnp->long_ptr.\*\*psnp->long_ptr.\*\*\*psnp->long_ptr} \
    955          {\*\*\*psnp->long_ptr} 1 {long \*}}
    956 } "get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr"
    957 
    958 # Test: c_variable-5.25
    959 # Desc: number of children of *(*(psnp->long_ptr))
    960 mi_gdb_test "-var-info-num-children psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr" \
    961 	"\\^done,numchild=\"1\"" \
    962 	"get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr"
    963 
    964 # Test: c_variable-5.26
    965 # Desc: children of *(*(*(psnp->long_ptr)))
    966 mi_list_varobj_children "psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr" {
    967     {{psnp->long_ptr.\*psnp->long_ptr.\*\*psnp->long_ptr.\*\*\*psnp->long_ptr.\*\*\*\*psnp->long_ptr}
    968         {\*\*\*\*psnp->long_ptr} 0 {long}}
    969 } "get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr"
    970 
    971 # Test: c_variable-5.27
    972 # Desc: number of children of *(*(*(psnp->long_ptr)))
    973 mi_gdb_test "-var-info-num-children psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr" \
    974 	"\\^done,numchild=\"1\"" \
    975 	"get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr"
    976 
    977 # Test: c_variable-5.28
    978 # Desc: children of *(*(*(*(psnp->long_ptr))))
    979 mi_list_varobj_children "psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr" {} \
    980 	"get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr"
    981 
    982 # Test: c_variable-5.29
    983 # Desc: number of children of *(*(*(*(psnp->long_ptr))))
    984 mi_gdb_test "-var-info-num-children psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr" \
    985 	"\\^done,numchild=\"0\"" \
    986 	"get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr"
    987 
    988 # Test: c_variable-5.30
    989 # Desc: create psnp->ptrs
    990 mi_create_varobj "psnp->ptrs" "psnp->ptrs" \
    991 	"create local variable  psnp->ptrs"
    992 
    993 # Test: c_variable-5.31
    994 # Desc: children of psnp->ptrs
    995 mi_list_varobj_children "psnp->ptrs" {
    996     {psnp->ptrs.0 0 4 {struct _struct_n_pointer \*}}
    997     {psnp->ptrs.1 1 4 {struct _struct_n_pointer \*}}
    998     {psnp->ptrs.2 2 4 {struct _struct_n_pointer \*}}
    999 } "get children of psnp->ptrs"
   1000 
   1001 # Test: c_variable-5.32
   1002 # Desc: number of children of psnp->ptrs
   1003 mi_gdb_test "-var-info-num-children psnp->ptrs" \
   1004 	"\\^done,numchild=\"3\"" \
   1005 	"get number of children of psnp->ptrs"
   1006 
   1007 # Test: c_variable-5.33
   1008 # Desc: children of psnp->ptrs[0]
   1009 mi_list_varobj_children "psnp->ptrs.0" {
   1010     {psnp->ptrs.0.char_ptr char_ptr 1 {char \*\*\*\*}}
   1011     {psnp->ptrs.0.long_ptr long_ptr 1 {long \*\*\*\*}}
   1012     {psnp->ptrs.0.ptrs ptrs 3 {struct _struct_n_pointer \*\[3\]}}
   1013     {psnp->ptrs.0.next next 4 {struct _struct_n_pointer \*}}
   1014 } "get children of psnp->ptrs.0"
   1015 
   1016 # Test: c_variable-5.34
   1017 # Desc: number of children of psnp->ptrs[0]
   1018 mi_gdb_test "-var-info-num-children psnp->ptrs.0" \
   1019 	"\\^done,numchild=\"4\"" \
   1020 	"get number of children of psnp->ptrs.0"
   1021 
   1022 # Test: c_variable-5.35
   1023 # Desc: children of psnp->ptrs[0]->next
   1024 mi_list_varobj_children "psnp->ptrs.0.next" {
   1025     {psnp->ptrs.0.next.char_ptr char_ptr 1 {char \*\*\*\*}}
   1026     {psnp->ptrs.0.next.long_ptr long_ptr 1 {long \*\*\*\*}}
   1027     {psnp->ptrs.0.next.ptrs ptrs 3 {struct _struct_n_pointer \*\[3\]}}
   1028     {psnp->ptrs.0.next.next next 4 {struct _struct_n_pointer \*}}
   1029 } "get children of psnp->ptrs.0.next"
   1030 
   1031 #} {char_ptr long_ptr ptrs next}
   1032 
   1033 # Test: c_variable-5.36
   1034 # Desc: number of children of psnp->ptrs[0]->next
   1035 mi_gdb_test "-var-info-num-children psnp->ptrs.0.next" \
   1036 	"\\^done,numchild=\"4\"" \
   1037 	"get number of children of psnp->ptrs.0.next"
   1038 
   1039 
   1040 # Test: c_variable-5.37
   1041 # Desc: children of psnp->ptrs[0]->next->char_ptr
   1042 mi_list_varobj_children "psnp->ptrs.0.next.char_ptr" {
   1043     {{psnp->ptrs.0.next.char_ptr.\*char_ptr} {\*char_ptr} 1 {char \*\*\*}}
   1044 } "get children of psnp->ptrs.0.next.char_ptr"
   1045 
   1046 #gdbtk_test c_variable-5.37 {children of psnp->ptrs[0]->next->char_ptr} {
   1047 #  get_children psnp->ptrs.0.next.char_ptr
   1048 #} {*char_ptr}
   1049 
   1050 # Test: c_variable-5.38
   1051 # Desc: number of children of psnp->ptrs[0]->next->char_ptr
   1052 mi_gdb_test "-var-info-num-children psnp->ptrs.0.next.char_ptr" \
   1053 	"\\^done,numchild=\"1\"" \
   1054 	"get number of children of psnp->ptrs.0.next.char_ptr"
   1055 
   1056 # Test: c_variable-5.39
   1057 # Desc: children of *psnp->ptrs[0]->next->char_ptr
   1058 mi_list_varobj_children "psnp->ptrs.0.next.char_ptr.*char_ptr" {
   1059     {{psnp->ptrs.0.next.char_ptr.\*char_ptr.\*\*char_ptr} {\*\*char_ptr} 1 {char \*\*}}
   1060 } "get children of psnp->ptrs.0.next.char_ptr.*char_ptr"
   1061 
   1062 # Test: c_variable-5.40
   1063 # Desc: number of children of *psnp->ptrs[0]->next->char_ptr
   1064 mi_gdb_test "-var-info-num-children psnp->ptrs.0.next.char_ptr.*char_ptr" \
   1065 	"\\^done,numchild=\"1\"" \
   1066 	"get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr"
   1067 
   1068 # Test: c_variable-5.41
   1069 # Desc: children of **psnp->ptrs[0]->next->char_ptr
   1070 mi_list_varobj_children "psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr" {
   1071     {{psnp->ptrs.0.next.char_ptr.\*char_ptr.\*\*char_ptr.\*\*\*char_ptr} \
   1072          {\*\*\*char_ptr} 1 {char \*}}
   1073 } "get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr"
   1074 
   1075 # Test: c_variable-5.41B
   1076 # Desc: children of ***psnp->ptrs[0]->next->char_ptr
   1077 mi_list_varobj_children "psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr" {
   1078     {{psnp->ptrs.0.next.char_ptr.\*char_ptr.\*\*char_ptr.\*\*\*char_ptr.\*\*\*\*char_ptr} \
   1079          {\*\*\*\*char_ptr} 0 char}
   1080 } "get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr"
   1081 
   1082 # Test: c_variable-5.42
   1083 # Desc: number of children of **psnp->ptrs[0]->next->char_ptr
   1084 mi_gdb_test "-var-info-num-children psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr" \
   1085 	"\\^done,numchild=\"1\"" \
   1086 	"get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr"
   1087 
   1088 # Test: c_variable-5.43
   1089 # Desc: children of ***psnp->ptrs[0]->next->char_ptr
   1090 mi_list_varobj_children "psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr" {
   1091     {{psnp->ptrs.0.next.char_ptr.\*char_ptr.\*\*char_ptr.\*\*\*char_ptr.\*\*\*\*char_ptr} \
   1092          {\*\*\*\*char_ptr} 0 char}
   1093 } "get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr"
   1094 
   1095 # Test: c_variable-5.44
   1096 # Desc: number of children of ***psnp->ptrs[0]->next->char_ptr
   1097 mi_gdb_test "-var-info-num-children psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr" \
   1098 	"\\^done,numchild=\"1\"" \
   1099 	"get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr"
   1100 
   1101 # Test: c_variable-5.43B
   1102 # Desc: children of ****psnp->ptrs[0]->next->char_ptr
   1103 mi_list_varobj_children "psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr.****char_ptr" {} \
   1104 	"get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr"
   1105 
   1106 # Test: c_variable-5.44B
   1107 # Desc: number of children of ****psnp->ptrs[0]->next->char_ptr
   1108 mi_gdb_test "-var-info-num-children psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr.****char_ptr" \
   1109 	"\\^done,numchild=\"0\"" \
   1110 	"get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr"
   1111 
   1112 # Test: c_variable-5.45
   1113 # Desc: children of psnp->ptrs[0]->next->next
   1114 mi_list_varobj_children "psnp->ptrs.0.next.next" {
   1115     {psnp->ptrs.0.next.next.char_ptr char_ptr 1 {char \*\*\*\*}}
   1116     {psnp->ptrs.0.next.next.long_ptr long_ptr 1 {long \*\*\*\*}}
   1117     {psnp->ptrs.0.next.next.ptrs ptrs 3 {struct _struct_n_pointer \*\[3\]}}
   1118     {psnp->ptrs.0.next.next.next next 4 {struct _struct_n_pointer \*}}
   1119 } "get children of psnp->ptrs.0.next.next"
   1120 
   1121 # Test: c_variable-5.46
   1122 # Desc: children of psnp->ptrs[0]->next->next->ptrs
   1123 mi_list_varobj_children "psnp->ptrs.0.next.next.ptrs" {
   1124     {psnp->ptrs.0.next.next.ptrs.0 0 4 {struct _struct_n_pointer \*}}
   1125     {psnp->ptrs.0.next.next.ptrs.1 1 4 {struct _struct_n_pointer \*}}
   1126     {psnp->ptrs.0.next.next.ptrs.2 2 4 {struct _struct_n_pointer \*}}
   1127 } "get children of psnp->ptrs.0.next.next.ptrs"
   1128 
   1129 #  Step over "snp0.char_ptr = &b3;"
   1130 mi_step_to do_children_tests {} ".*${srcfile}" \
   1131     [expr $line_dct_snp0 + 2] "step \$line_dct_snp0 + 2"
   1132 
   1133 # Test: c_variable-5.47
   1134 # Desc: check that psnp->char_ptr (and [0].char_ptr) changed
   1135 mi_varobj_update * {psnp->ptrs.0.char_ptr
   1136     psnp->char_ptr
   1137     psnp->char_ptr.\\*psnp->char_ptr psnp->char_ptr.\\*psnp->char_ptr.\\*\\*psnp->char_ptr
   1138     psnp->char_ptr.\\*psnp->char_ptr.\\*\\*psnp->char_ptr.\\*\\*\\*psnp->char_ptr
   1139     psnp->char_ptr.\\*psnp->char_ptr.\\*\\*psnp->char_ptr.\\*\\*\\*psnp->char_ptr.\\*\\*\\*\\*psnp->char_ptr } \
   1140 	"update all vars psnp->char_ptr (and 0.char_ptr) changed"
   1141 
   1142 #  Step over "snp1.char_ptr = &c3;"
   1143 mi_step_to do_children_tests {} ".*${srcfile}" \
   1144     [expr $line_dct_snp0 + 3] "step \$line_dct_snp0 + 3"
   1145 
   1146 # Test: c_variable-5.48
   1147 # Desc: check that psnp->next->char_ptr (and [1].char_ptr) changed
   1148 mi_varobj_update * {psnp->ptrs.0.next.char_ptr
   1149     psnp->ptrs.0.next.char_ptr.\\*char_ptr
   1150     psnp->ptrs.0.next.char_ptr.\\*char_ptr.\\*\\*char_ptr
   1151     psnp->ptrs.0.next.char_ptr.\\*char_ptr.\\*\\*char_ptr.\\*\\*\\*char_ptr
   1152     psnp->ptrs.0.next.char_ptr.\\*char_ptr.\\*\\*char_ptr.\\*\\*\\*char_ptr.\\*\\*\\*\\*char_ptr} \
   1153 	"update all vars psnp->next->char_ptr (and 1.char_ptr) changed"
   1154 
   1155 
   1156 #  Step over "snp2.char_ptr = &a3;"
   1157 mi_step_to do_children_tests {} ".*${srcfile}" \
   1158     [expr $line_dct_snp0 + 4] "step \$line_dct_snp0 + 4"
   1159 
   1160 # Test: c_variable-5.49
   1161 # Desc: check that psnp->next->next->char_ptr (and [2].char_ptr) changed
   1162 mi_varobj_update * {psnp->ptrs.0.next.next.char_ptr} \
   1163 	"update all vars psnp->next->next->char_ptr (and 2.char_ptr) changed"
   1164 
   1165 
   1166 #  Step over "snp0.long_ptr = &y3;"
   1167 mi_step_to do_children_tests {} ".*${srcfile}" \
   1168     [expr $line_dct_snp0 + 5] "step \$line_dct_snp0 + 5"
   1169 
   1170 # Test: c_variable-5.50
   1171 # Desc: check that psnp->long_ptr (and [0].long_ptr) changed
   1172 mi_varobj_update * {psnp->ptrs.0.long_ptr psnp->long_ptr
   1173     psnp->long_ptr.\\*psnp->long_ptr
   1174     psnp->long_ptr.\\*psnp->long_ptr.\\*\\*psnp->long_ptr
   1175     psnp->long_ptr.\\*psnp->long_ptr.\\*\\*psnp->long_ptr.\\*\\*\\*psnp->long_ptr
   1176     psnp->long_ptr.\\*psnp->long_ptr.\\*\\*psnp->long_ptr.\\*\\*\\*psnp->long_ptr.\\*\\*\\*\\*psnp->long_ptr} \
   1177 	"update all vars psnp->long_ptr (and 0.long_ptr) changed"
   1178 
   1179 
   1180 #  Step over "snp1.long_ptr = &x3;"
   1181 mi_step_to do_children_tests {} ".*${srcfile}" \
   1182     [expr $line_dct_snp0 + 6] "step \$line_dct_snp0 + 6"
   1183 
   1184 # Test: c_variable-5.51
   1185 # Desc: check that psnp->next->long_ptr (and [1].long_ptr) changed
   1186 # Why does this have a FIXME?
   1187 setup_xfail *-*-*
   1188 mi_gdb_test "-var-update *" \
   1189 	"FIXME\\^done,changelist=\\\[\{name=\"psnp->ptrs.0.next.long_ptr\",in_scope_changed=\"false\"\}\\\]" \
   1190 	"update all vars psnp->next->long_ptr (and 1.long_ptr) changed"
   1191 clear_xfail *-*-*
   1192 
   1193 # This command produces this error message:
   1194 # &"warning: varobj_list: assertion failed - mycount <> 0\n"
   1195 #
   1196 
   1197 #  Step over "snp2.long_ptr = &z3;"
   1198 mi_step_to do_children_tests {} ".*${srcfile}" \
   1199     [expr $line_dct_snp0 + 7] "step \$line_dct_snp0 + 7"
   1200 
   1201 # Test: c_variable-5.52
   1202 # Desc: check that psnp->next->next->long_ptr (and [2].long_ptr) changed
   1203 mi_varobj_update * {psnp->ptrs.0.next.next.long_ptr} \
   1204 	"update all vars psnp->next->next->long_ptr (and 2.long_ptr) changed"
   1205 
   1206 mi_prepare_inline_tests $srcfile
   1207 
   1208 mi_run_inline_test child_deletion
   1209 
   1210 
   1211 mi_gdb_exit
   1212 return 0
   1213