binutils-gdb/gdb/testsuite/gdb.mi/mi2-var-child.exp
Bruno Larsen cdd4206647 gdb/testsuite: fix "continue outside of loop" TCL errors
Many test cases had a few lines in the beginning that look like:

if { condition } {
  continue
}

Where conditions varied, but were mostly in the form of ![runto_main] or
[skip_*_tests], making it quite clear that this code block was supposed
to finish the test if it entered the code block. This generates TCL
errors, as most of these tests are not inside loops.  All cases on which
this was an obvious mistake are changed in this patch.
2022-05-16 10:07:43 -03:00

1325 lines
47 KiB
Plaintext

# Copyright 1999-2022 Free Software Foundation, Inc.
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
# Test essential Machine interface (MI) operations
#
# Verify that, using the MI, we can create, update, delete variables.
#
load_lib mi-support.exp
set MIFLAGS "-i=mi2"
gdb_exit
if [mi_gdb_start] {
return
}
standard_testfile var-cmd.c
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
untested "failed to compile"
return -1
}
mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}
mi_runto do_children_tests
set line_dlt_first_real [gdb_get_line_number "weird = &struct_declarations;"]
mi_continue_to_line $line_dlt_first_real "step to real start of do_children_test"
##### #####
# #
# children tests #
# #
##### #####
# Test: c_variable-4.2
# Desc: create variable "struct_declarations"
mi_create_varobj "struct_declarations" "struct_declarations" \
"create local variable struct_declarations"
# Test: c_variable-4.3
# Desc: children of struct_declarations
# STABS doesn't give us argument types for the func ptr structs, but
# Dwarf 2 does.
mi_list_varobj_children "struct_declarations" {
{struct_declarations.integer integer 0 int}
{struct_declarations.character character 0 char}
{struct_declarations.char_ptr char_ptr 1 "char \\*"}
{struct_declarations.long_int long_int 0 "long"}
{struct_declarations.int_ptr_ptr int_ptr_ptr 1 "int \\*\\*"}
{struct_declarations.long_array long_array 10 "long \\[10\\]"}
{struct_declarations.func_ptr func_ptr 0 "void \\(\\*\\)\\((void)?\\)"}
{struct_declarations.func_ptr_struct func_ptr_struct 0 \
"struct _struct_decl \\(\\*\\)(\\(int, char \\*, long\\))?"}
{struct_declarations.func_ptr_ptr func_ptr_ptr 0 \
"struct _struct_decl \\*\\(\\*\\)\\((int, char \\*, long)?\\)"}
{struct_declarations.u1 u1 4 "union \\{\\.\\.\\.\\}"}
{struct_declarations.s2 s2 4 "struct \\{\\.\\.\\.\\}"}
} "get children of struct_declarations"
#gdbtk_test c_variable-4.3 {children of struct_declarations} {
# get_children struct_declarations
#} {integer character char_ptr long_int int_ptr_ptr long_array func_ptr func_ptr_struct func_ptr_ptr u1 s2}
# Test: c_variable-4.4
# Desc: number of children of struct_declarations
mi_gdb_test "-var-info-num-children struct_declarations" \
"\\^done,numchild=\"11\"" \
"get number of children of struct_declarations"
# Test: c_variable-4.5
# Desc: children of struct_declarations.integer
mi_list_varobj_children "struct_declarations.integer" {} \
"get children of struct_declarations.integer"
# Test: c_variable-4.6
# Desc: number of children of struct_declarations.integer
mi_gdb_test "-var-info-num-children struct_declarations.integer" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.integer"
# Test: c_variable-4.7
# Desc: children of struct_declarations.character
mi_list_varobj_children "struct_declarations.character" {} \
"get children of struct_declarations.character"
# Test: c_variable-4.8
# Desc: number of children of struct_declarations.character
mi_gdb_test "-var-info-num-children struct_declarations.character" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.character"
# Test: c_variable-4.9
# Desc: children of struct_declarations.char_ptr
mi_list_varobj_children "struct_declarations.char_ptr" {
{{struct_declarations.char_ptr.\*char_ptr} {\*char_ptr} 0 char}
} "get children of struct_declarations.char_ptr"
# Test: c_variable-4.10
# Desc: number of children of struct_declarations.char_ptr
mi_gdb_test "-var-info-num-children struct_declarations.char_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of struct_declarations.char_ptr"
# Test: c_variable-4.11
# Desc: children of struct_declarations.long_int
mi_list_varobj_children "struct_declarations.long_int" {} \
"get children of struct_declarations.long_int"
# Test: c_variable-4.12
# Desc: number of children of struct_declarations.long_int
mi_gdb_test "-var-info-num-children struct_declarations.long_int" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.long_int"
# Test: c_variable-4.13
# Desc: children of int_ptr_ptr
mi_list_varobj_children "struct_declarations.int_ptr_ptr" {
{{struct_declarations.int_ptr_ptr.\*int_ptr_ptr} {\*int_ptr_ptr} 1 {int \*}}
} "get children of struct_declarations.int_ptr_ptr"
#gdbtk_test c_variable-4.13 {children of int_ptr_ptr} {
# get_children struct_declarations.int_ptr_ptr
#} {*int_ptr_ptr}
# Test: c_variable-4.14
# Desc: number of children of int_ptr_ptr
mi_gdb_test "-var-info-num-children struct_declarations.int_ptr_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of struct_declarations.int_ptr_ptr"
# Test: c_variable-4.15
# Desc: children of struct_declarations.long_array
mi_list_array_varobj_children "struct_declarations.long_array" 10 "long" \
"get children of struct_declarations.long_array"
# Test: c_variable-4.16
# Desc: number of children of struct_declarations.long_array
mi_gdb_test "-var-info-num-children struct_declarations.long_array" \
"\\^done,numchild=\"10\"" \
"get number of children of struct_declarations.long_array"
# Test: c_variable-4.17
# Desc: children of struct_declarations.func_ptr
mi_list_varobj_children "struct_declarations.func_ptr" {} \
"get children of struct_declarations.func_ptr"
# Test: c_variable-4.18
# Desc: number of children of struct_declarations.func_ptr
mi_gdb_test "-var-info-num-children struct_declarations.func_ptr" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.func_ptr"
# Test: c_variable-4.19
# Desc: children of struct_declarations.func_ptr_struct
mi_list_varobj_children "struct_declarations.func_ptr_struct" {} \
"get children of struct_declarations.func_ptr_struct"
# Test: c_variable-4.20
# Desc: number of children of struct_declarations.func_ptr_struct
mi_gdb_test "-var-info-num-children struct_declarations.func_ptr_struct" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.func_ptr_struct"
# Test: c_variable-4.21
# Desc: children of struct_declarations.func_ptr_ptr
mi_list_varobj_children "struct_declarations.func_ptr_ptr" {} \
"get children of struct_declarations.func_ptr_ptr"
# Test: c_variable-4.22
# Desc: number of children of struct_declarations.func_ptr_ptr
mi_gdb_test "-var-info-num-children struct_declarations.func_ptr_ptr" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.func_ptr_ptr"
# Test: c_variable-4.23
# Desc: children of struct_declarations.u1
mi_list_varobj_children "struct_declarations.u1" {
{struct_declarations.u1.a a 0 int}
{struct_declarations.u1.b b 1 {char \*}}
{struct_declarations.u1.c c 0 {long}}
{struct_declarations.u1.d d 0 {enum foo}}
} "get children of struct_declarations.u1"
# Test: c_variable-4.24
# Desc: number of children of struct_declarations.u1
mi_gdb_test "-var-info-num-children struct_declarations.u1" \
"\\^done,numchild=\"4\"" \
"get number of children of struct_declarations.u1"
# Test: c_variable-4.25
# Desc: children of struct_declarations.s2
mi_list_varobj_children "struct_declarations.s2" {
{struct_declarations.s2.u2 u2 3 {union \{\.\.\.\}}}
{struct_declarations.s2.g g 0 int}
{struct_declarations.s2.h h 0 char}
{struct_declarations.s2.i i 10 {long \[10\]}}
} "get children of struct_declarations.s2"
#gdbtk_test c_variable-4.25 {children of struct_declarations.s2} {
# get_children struct_declarations.s2
#} {u2 g h i}
# Test: c_variable-4.26
# Desc: number of children of struct_declarations.s2
mi_gdb_test "-var-info-num-children struct_declarations.s2" \
"\\^done,numchild=\"4\"" \
"get number of children of struct_declarations.s2"
for {set i 1} {$i <= 9} {incr i} {
mi_list_varobj_children "struct_declarations.long_array.$i" {} \
"get children of struct_declarations.long_array.$i"
mi_gdb_test "-var-info-num-children struct_declarations.long_array.$i" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.long_array.$i"
}
# Test: c_variable-4.45
# Desc: children of struct_declarations.u1.a
mi_list_varobj_children "struct_declarations.u1.a" {} \
"get children of struct_declarations.u1.a"
# Test: c_variable-4.46
# Desc: number of children of struct_declarations.u1.a
mi_gdb_test "-var-info-num-children struct_declarations.u1.a" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.u1.a"
# Test: c_variable-4.47
# Desc: children of struct_declarations.u1.b
mi_list_varobj_children "struct_declarations.u1.b" {
{{struct_declarations.u1.b.\*b} {\*b} 0 char}
} "get children of struct_declarations.u1.b"
# Test: c_variable-4.48
# Desc: number of children of struct_declarations.u1.b
mi_gdb_test "-var-info-num-children struct_declarations.u1.b" \
"\\^done,numchild=\"1\"" \
"get number of children of struct_declarations.u1.b"
# Test: c_variable-4.49
# Desc: children of struct_declarations.u1.c
mi_list_varobj_children "struct_declarations.u1.c" {} \
"get children of struct_declarations.u1.c"
# Test: c_variable-4.50
# Desc: number of children of struct_declarations.u1.c
mi_gdb_test "-var-info-num-children struct_declarations.u1.c" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.u1.c"
# Test: c_variable-4.51
# Desc: children of struct_declarations.u1.d
mi_list_varobj_children "struct_declarations.u1.d" {} \
"get children of struct_declarations.u1.d"
# Test: c_variable-4.52
# Desc: number of children of struct_declarations.u1.d
mi_gdb_test "-var-info-num-children struct_declarations.u1.d" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.u1.d"
# Test: c_variable-4.53
# Desc: children of struct_declarations.s2.u2
mi_list_varobj_children "struct_declarations.s2.u2" {
{"struct_declarations.s2.u2.u1s1" "u1s1" 4 {struct \{\.\.\.\}}}
{struct_declarations.s2.u2.f f 0 "long"}
{struct_declarations.s2.u2.u1s2 u1s2 2 {struct \{\.\.\.\}}}
} "get children of struct_declarations.s2.u2"
# Test: c_variable-4.54
# Desc: number of children of struct_declarations.s2.u2
mi_gdb_test "-var-info-num-children struct_declarations.s2.u2" \
"\\^done,numchild=\"3\"" \
"get number of children of struct_declarations.s2.u2"
# Test: c_variable-4.55
# Desc: children of struct_declarations.s2.g
mi_list_varobj_children struct_declarations.s2.g {} \
"get children of struct_declarations.s2.g"
# Test: c_variable-4.56
# Desc: number of children of struct_declarations.s2.g
mi_gdb_test "-var-info-num-children struct_declarations.s2.g" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.s2.g"
# Test: c_variable-4.57
# Desc: children of struct_declarations.s2.h
mi_list_varobj_children struct_declarations.s2.h {} \
"get children of struct_declarations.s2.h"
# Test: c_variable-4.58
# Desc: number of children of struct_declarations.s2.h
mi_gdb_test "-var-info-num-children struct_declarations.s2.h" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.s2.h"
# Test: c_variable-4.59
# Desc: children of struct_declarations.s2.i
set t {}
for {set i 0} {$i < 10} {incr i} {
lappend t [list struct_declarations.s2.i.$i $i 0 "long"]
}
mi_list_varobj_children struct_declarations.s2.i $t \
"get children of struct_declarations.s2.i"
# Test: c_variable-4.60
# Desc: number of children of struct_declarations.s2.i
mi_gdb_test "-var-info-num-children struct_declarations.s2.i" \
"\\^done,numchild=\"10\"" \
"get number of children of struct_declarations.s2.i"
# Test: c_variable-4.61
# Desc: children of struct_declarations.s2.u2.u1s1
mi_list_varobj_children struct_declarations.s2.u2.u1s1 {
{struct_declarations.s2.u2.u1s1.d d 0 int}
{struct_declarations.s2.u2.u1s1.e e 10 {char \[10\]}}
{struct_declarations.s2.u2.u1s1.func func 0 {int \*\(\*\)\((void)?\)}}
{struct_declarations.s2.u2.u1s1.foo foo 0 efoo}
} "get children of struct_declarations.s2.u2.u1s1"
# Test: c_variable-4.62
# Desc: number of children of struct_declarations.s2.u2.u1s1
mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s1" \
"\\^done,numchild=\"4\"" \
"get number of children of struct_declarations.s2.u2.u1s1"
# Test: c_variable-4.63
# Desc: children of struct_declarations.s2.u2.f
mi_list_varobj_children struct_declarations.s2.u2.f {} \
"get children of struct_declarations.s2.u2.f"
# Test: c_variable-4.64
# Desc: number of children of struct_declarations.s2.u2.f
mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.f" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.s2.u2.f"
# Test: c_variable-4.65
# Desc: children of struct_declarations.s2.u2.u1s2
mi_list_varobj_children struct_declarations.s2.u2.u1s2 {
{struct_declarations.s2.u2.u1s2.array_ptr array_ptr 2 {char \[2\]}}
{struct_declarations.s2.u2.u1s2.func func 0 {int \(\*\)\((int, char \*)?\)}}
} "get children of struct_declarations.s2.u2.u1s2"
# Test: c_variable-4.66
# Desc: number of children of struct_declarations.s2.u2.u1s2
mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s2" \
"\\^done,numchild=\"2\"" \
"get number of children of struct_declarations.s2.u2.u1s2"
# Test: c_variable-4.67
# Desc: children of struct_declarations.s2.u2.u1s1.d
mi_list_varobj_children struct_declarations.s2.u2.u1s1.d {} \
"get children of struct_declarations.s2.u2.u1s1.d"
# Test: c_variable-4.68
# Desc: number of children of struct_declarations.s2.u2.u1s1.d
mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s1.d" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.s2.u2.u1s1.d"
# Test: c_variable-4.69
# Desc: children of struct_declarations.s2.u2.u1s1.e
set t {}
for {set i 0} {$i < 10} {incr i} {
lappend t [list struct_declarations.s2.u2.u1s1.e.$i $i 0 char]
}
mi_list_varobj_children struct_declarations.s2.u2.u1s1.e $t \
"get children of struct_declarations.s2.u2.u1s1.e"
# Test: c_variable-4.70
# Desc: number of children of struct_declarations.s2.u2.u1s1.e
mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s1.e" \
"\\^done,numchild=\"10\"" \
"get number of children of struct_declarations.s2.u2.u1s1.e"
# Test: c_variable-4.71
# Desc: children of struct_declarations.s2.u2.u1s1.func
mi_list_varobj_children struct_declarations.s2.u2.u1s1.func {} \
"get children of struct_declarations.s2.u2.u1s1.func"
# Test: c_variable-4.72
# Desc: number of children of struct_declarations.s2.u2.u1s1.func
mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s1.func" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.s2.u2.u1s1.func"
# Test: c_variable-4.73
# Desc: children of struct_declarations.s2.u2.u1s1.foo
mi_list_varobj_children struct_declarations.s2.u2.u1s1.foo {} \
"get children of struct_declarations.s2.u2.u1s1.foo"
# Test: c_variable-4.74
# Desc: number of children of struct_declarations.s2.u2.u1s1.foo
mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s1.foo" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.s2.u2.u1s1.foo"
# Test: c_variable-4.75
# Desc: children of struct_declarations.s2.u2.u1s2.array_ptr
mi_list_varobj_children struct_declarations.s2.u2.u1s2.array_ptr {
{struct_declarations.s2.u2.u1s2.array_ptr.0 0 0 char}
{struct_declarations.s2.u2.u1s2.array_ptr.1 1 0 char}
} "get children of struct_declarations.s2.u2.u1s2.array_ptr"
# Test: c_variable-4.76
# Desc: number of children of struct_declarations.s2.u2.u1s2.array_ptr
mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s2.array_ptr" \
"\\^done,numchild=\"2\"" \
"get number of children of struct_declarations.s2.u2.u1s2.array_ptr"
# Test: c_variable-4.77
# Desc: children of struct_declarations.s2.u2.u1s2.func
mi_list_varobj_children struct_declarations.s2.u2.u1s2.func {} \
"get children of struct_declarations.s2.u2.u1s2.func"
# Test: c_variable-4.78
# Desc: number of children of struct_declarations.s2.u2.u1s2.func
mi_gdb_test "-var-info-num-children struct_declarations.s2.u2.u1s2.func" \
"\\^done,numchild=\"0\"" \
"get number of children of struct_declarations.s2.u2.u1s2.func"
# Test: c_variable-4.79
# Desc: children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
mi_list_varobj_children "struct_declarations.int_ptr_ptr.*int_ptr_ptr" {
{{struct_declarations.int_ptr_ptr.\*int_ptr_ptr.\*\*int_ptr_ptr} \
{\*\*int_ptr_ptr} 0 int}
} "get children of struct_declarations.int_ptr_ptr.*int_ptr_ptr"
# Test: c_variable-4.80
# Desc: Number of children of struct_declarations.int_ptr_ptr.*int_ptr_ptr
mi_gdb_test "-var-info-num-children struct_declarations.int_ptr_ptr.*int_ptr_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of struct_declarations.int_ptr_ptr.*int_ptr_ptr"
# Step to "struct_declarations.integer = 123;"
set line_dct_123 [gdb_get_line_number "struct_declarations.integer = 123;"]
mi_step_to do_children_tests {} {.*var-cmd.c} \
$line_dct_123 "step to line \$line_dct_123"
# Test: c_variable-4.81
# Desc: create local variable "weird"
mi_create_varobj weird weird "create local variable weird"
# Test: c_variable-4.82
# Desc: children of weird
mi_list_varobj_children "weird" {
{weird.integer integer 0 int}
{weird.character character 0 char}
{weird.char_ptr char_ptr 1 "char \\*"}
{weird.long_int long_int 0 "long"}
{weird.int_ptr_ptr int_ptr_ptr 1 "int \\*\\*"}
{weird.long_array long_array 10 "long \\[10\\]"}
{weird.func_ptr func_ptr 0 "void \\(\\*\\)\\((void)?\\)"}
{weird.func_ptr_struct func_ptr_struct 0 \
"struct _struct_decl \\(\\*\\)(\\(int, char \\*, long\\))?"}
{weird.func_ptr_ptr func_ptr_ptr 0 \
"struct _struct_decl \\*\\(\\*\\)\\((int, char \\*, long)?\\)"}
{weird.u1 u1 4 "union \\{\\.\\.\\.\\}"}
{weird.s2 s2 4 "struct \\{\\.\\.\\.\\}"}
} "get children of weird"
# Test: c_variable-4.83
# Desc: number of children of weird
mi_gdb_test "-var-info-num-children weird" \
"\\^done,numchild=\"11\"" \
"get number of children of weird"
# Test: c_variable-4.84
# Desc: children of weird->long_array
mi_list_array_varobj_children weird.long_array 10 "long" \
"get children of weird.long_array"
#gdbtk_test c_variable-4.84 {children of weird->long_array} {
# get_children weird.long_array
#} {0 1 2 3 4 5 6 7 8 9}
# Test: c_variable-4.85
# Desc: number of children of weird.long_array
mi_gdb_test "-var-info-num-children weird.long_array" \
"\\^done,numchild=\"10\"" \
"get number of children of weird.long_array"
# Test: c_variable-4.86
# Desc: children of weird.int_ptr_ptr
mi_list_varobj_children weird.int_ptr_ptr {
{{weird.int_ptr_ptr.\*int_ptr_ptr} {\*int_ptr_ptr} 1 {int \*}}
} "get children of weird.int_ptr_ptr"
#gdbtk_test c_variable-4.86 {children of weird->int_ptr_ptr} {
# get_children weird.int_ptr_ptr
#} {*int_ptr_ptr}
# Test: c_variable-4.87
# Desc: number of children of weird.int_ptr_ptr
mi_gdb_test "-var-info-num-children weird.int_ptr_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of weird.int_ptr_ptr"
# Test: c_variable-4.88
# Desc: children of *weird->int_ptr_ptr
mi_list_varobj_children "weird.int_ptr_ptr.*int_ptr_ptr" {
{{weird.int_ptr_ptr.\*int_ptr_ptr.\*\*int_ptr_ptr} {\*\*int_ptr_ptr} 0 "int"}
} "get children of weird.int_ptr_ptr.*int_ptr_ptr"
#gdbtk_test c_variable-4.88 {children of *weird->int_ptr_ptr} {
# get_children weird.int_ptr_ptr.*int_ptr_ptr
#} {**int_ptr_ptr}
# Test: c_variable-4.89
# Desc: number of children *weird->int_ptr_ptr
mi_gdb_test "-var-info-num-children weird.int_ptr_ptr.*int_ptr_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of weird.int_ptr_ptr.*int_ptr_ptr"
# Test: c_variable-4.90
# Desc: create weird->int_ptr_ptr
mi_create_varobj "weird->int_ptr_ptr" "weird->int_ptr_ptr" \
"create local variable weird->int_ptr_ptr"
# Test: c_variable-4.91
# Desc: children of weird->int_ptr_ptr
mi_list_varobj_children "weird->int_ptr_ptr" {
{{weird->int_ptr_ptr.\*weird->int_ptr_ptr} {\*weird->int_ptr_ptr} 1 {int \*}}
} "get children of weird->int_ptr_ptr"
# Test: c_variable-4.92
# Desc: number of children of (weird->int_ptr_ptr)
mi_gdb_test "-var-info-num-children weird->int_ptr_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of weird->int_ptr_ptr"
# Test: c_variable-4.93
# Desc: children of *(weird->int_ptr_ptr)
mi_list_varobj_children "weird->int_ptr_ptr.*weird->int_ptr_ptr" {
{{weird->int_ptr_ptr.\*weird->int_ptr_ptr.\*\*weird->int_ptr_ptr} \
{\*\*weird->int_ptr_ptr} 0 int}
} "get children of weird->int_ptr_ptr.*weird->int_ptr_ptr"
# Test: c_variable-4.94
# Desc: number of children of *(weird->int_ptr_ptr)
mi_gdb_test "-var-info-num-children weird->int_ptr_ptr.*weird->int_ptr_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr"
# Test: c_variable-4.95
# Desc: children of *(*(weird->int_ptr_ptr))
mi_list_varobj_children "weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr" {} \
"get children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr"
# Test: c_variable-4.96
# Desc: number of children of *(*(weird->int_ptr_ptr))
mi_list_varobj_children "weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr" {} \
"get number of children of weird->int_ptr_ptr.*weird->int_ptr_ptr.**weird->int_ptr_ptr"
# Test: c_variable-4.97
# Desc: is weird editable
mi_gdb_test "-var-show-attributes weird" \
"\\^done,attr=\"editable\"" \
"is weird editable"
# Test: c_variable-4.98
# Desc: is weird->int_ptr_ptr editable
mi_gdb_test "-var-show-attributes weird->int_ptr_ptr" \
"\\^done,attr=\"editable\"" \
"is weird->int_ptr_ptr editable"
# Test: c_variable-4.99
# Desc: is *(weird->int_ptr_ptr) editable
mi_gdb_test "-var-show-attributes weird.int_ptr_ptr.*int_ptr_ptr" \
"\\^done,attr=\"editable\"" \
"is weird.int_ptr_ptr.*int_ptr_ptr editable"
# Test: c_variable-4.100
# Desc: is *(*(weird->int_ptr_ptr)) editable
mi_gdb_test "-var-show-attributes weird.int_ptr_ptr.*int_ptr_ptr.**int_ptr_ptr" \
"\\^done,attr=\"editable\"" \
"is weird.int_ptr_ptr.*int_ptr_ptr.**int_ptr_ptr editable"
# Test: c_variable-4.101
# Desc: is weird->u1 editable
mi_gdb_test "-var-show-attributes weird.u1" \
"\\^done,attr=\"noneditable\"" \
"is weird.u1 editable"
# Test: c_variable-4.102
# Desc: is weird->s2 editable
mi_gdb_test "-var-show-attributes weird.s2" \
"\\^done,attr=\"noneditable\"" \
"is weird.s2 editable"
# Test: c_variable-4.103
# Desc: is struct_declarations.u1.a editable
mi_gdb_test "-var-show-attributes struct_declarations.u1.a" \
"\\^done,attr=\"editable\"" \
"is struct_declarations.u1.a editable"
# Test: c_variable-4.104
# Desc: is struct_declarations.u1.b editable
mi_gdb_test "-var-show-attributes struct_declarations.u1.b" \
"\\^done,attr=\"editable\"" \
"is struct_declarations.u1.b editable"
# Test: c_variable-4.105
# Desc: is struct_declarations.u1.c editable
mi_gdb_test "-var-show-attributes struct_declarations.u1.c" \
"\\^done,attr=\"editable\"" \
"is struct_declarations.u1.c editable"
# Test: c_variable-4.106
# Desc: is struct_declarations.long_array editable
mi_gdb_test "-var-show-attributes struct_declarations.long_array" \
"\\^done,attr=\"noneditable\"" \
"is struct_declarations.long_array editable"
# Test: c_variable-4.107
# Desc: is struct_declarations.long_array[0] editable
mi_gdb_test "-var-show-attributes struct_declarations.long_array.0" \
"\\^done,attr=\"editable\"" \
"is struct_declarations.long_array.0 editable"
# Test: c_variable-4.108
# Desc: is struct_declarations editable
mi_gdb_test "-var-show-attributes struct_declarations" \
"\\^done,attr=\"noneditable\"" \
"is struct_declarations editable"
mi_gdb_test "-var-delete weird" \
"\\^done,ndeleted=\"24\"" \
"delete var weird"
##### #####
# #
# children and update tests #
# #
##### #####
# Test: c_variable-5.1
# Desc: check that nothing changed
mi_varobj_update * {} "update all vars. None changed"
# Step over "struct_declarations.integer = 123;"
mi_step_to do_children_tests {} {.*var-cmd.c} \
[expr $line_dct_123 + 1] "step \$line_dct_123 + 1"
# Test: c_variable-5.2
# Desc: check that integer changed
mi_varobj_update * {struct_declarations.integer} \
"update all vars struct_declarations.integer"
# Step over:
# weird->char_ptr = "hello";
# bar = 2121;
# foo = &bar;
mi_execute_to "exec-step 3" "end-stepping-range" do_children_tests {} {.*var-cmd.c} \
[expr $line_dct_123 + 4] {} "step \$line_dct_123 + 4"
# Test: c_variable-5.3
# Desc: check that char_ptr changed
mi_varobj_update * {struct_declarations.char_ptr
struct_declarations.char_ptr.\\*char_ptr} \
"update all vars struct_declarations.char_ptr"
# Step over "struct_declarations.int_ptr_ptr = &foo;"
mi_step_to do_children_tests {} {.*var-cmd.c} \
[expr $line_dct_123 + 5] "step \$line_dct_123 + 5"
# Test: c_variable-5.4
# Desc: check that int_ptr_ptr and children changed
mi_varobj_update * {weird->int_ptr_ptr
weird->int_ptr_ptr.\\*weird->int_ptr_ptr
weird->int_ptr_ptr.\\*weird->int_ptr_ptr.\\*\\*weird->int_ptr_ptr
struct_declarations.int_ptr_ptr
struct_declarations.int_ptr_ptr.\\*int_ptr_ptr
struct_declarations.int_ptr_ptr.\\*int_ptr_ptr.\\*\\*int_ptr_ptr} \
"update all vars int_ptr_ptr and children changed"
# Step over "weird->long_array[0] = 1234;"
mi_step_to do_children_tests {} {.*var-cmd.c} \
[expr $line_dct_123 + 6] "step \$line_dct_123 + 6"
# Test: c_variable-5.5
# Desc: check that long_array[0] changed
mi_varobj_update * {struct_declarations.long_array.0} \
"update all vars struct_declarations.long_array.0 changed"
# Step over "struct_declarations.long_array[1] = 2345;"
mi_step_to do_children_tests {} {.*var-cmd.c} \
[expr $line_dct_123 + 7] "step \$line_dct_123 + 7"
# Test: c_variable-5.6
# Desc: check that long_array[1] changed
mi_varobj_update * {struct_declarations.long_array.1} \
"update all vars struct_declarations.long_array.1 changed"
# Step over "weird->long_array[2] = 3456;"
mi_step_to do_children_tests {} {.*var-cmd.c} \
[expr $line_dct_123 + 8] "step \$line_dct_123 + 8"
# Test: c_variable-5.7
# Desc: check that long_array[2] changed
mi_varobj_update * {struct_declarations.long_array.2} \
"update all vars struct_declarations.long_array.2 changed"
# Step over:
# struct_declarations.long_array[3] = 4567;
# weird->long_array[4] = 5678;
# struct_declarations.long_array[5] = 6789;
# weird->long_array[6] = 7890;
# struct_declarations.long_array[7] = 8901;
# weird->long_array[8] = 9012;
# struct_declarations.long_array[9] = 1234;
set line_dct_nothing [gdb_get_line_number "weird->func_ptr = nothing;"]
mi_execute_to "exec-step 7" "end-stepping-range" do_children_tests {} {.*var-cmd.c} \
$line_dct_nothing {} "step \$line_dct_nothing"
# Test: c_variable-5.8
# Desc: check that long_array[3-9] changed
mi_varobj_update * {struct_declarations.long_array.3
struct_declarations.long_array.4
struct_declarations.long_array.5
struct_declarations.long_array.6
struct_declarations.long_array.7
struct_declarations.long_array.8
struct_declarations.long_array.9} \
"update all vars struct_declarations.long_array.3-9 changed"
# Step over "weird->func_ptr = nothing;"
mi_step_to do_children_tests {} ".*${srcfile}" \
[expr $line_dct_nothing + 1] "step \$line_dct_nothing + 1"
# Test: c_variable-5.9
# Desc: check that func_ptr changed
mi_varobj_update * {struct_declarations.func_ptr} \
"update all vars struct_declarations.func_ptr changed"
# Delete all variables
mi_gdb_test "-var-delete struct_declarations" \
"\\^done,ndeleted=\"65\"" \
"delete var struct_declarations"
mi_gdb_test "-var-delete weird->int_ptr_ptr" \
"\\^done,ndeleted=\"3\"" \
"delete var weird->int_ptr_ptr"
# Step over all lines:
# ...
# psnp = &snp0;
set line_dct_snp0 [gdb_get_line_number "psnp = &snp0;"]
mi_execute_to "exec-step 45" "end-stepping-range" do_children_tests {} {.*var-cmd.c} \
[expr $line_dct_snp0 + 1] {} "step \$line_dct_snp0 + 1"
# Test: c_variable-5.10
# Desc: create psnp->char_ptr
mi_create_varobj "psnp->char_ptr" "psnp->char_ptr" \
"create local variable psnp->char_ptr"
# Test: c_variable-5.11
# Desc: children of psnp->char_ptr
mi_list_varobj_children "psnp->char_ptr" {
{{psnp->char_ptr.\*psnp->char_ptr} {\*psnp->char_ptr} 1 {char \*\*\*}}
} "get children of psnp->char_ptr"
# Test: c_variable-5.12
# Desc: number of children of psnp->char_ptr
mi_gdb_test "-var-info-num-children psnp->char_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of psnp->char_ptr"
# Test: c_variable-5.13
# Desc: children of *(psnp->char_ptr)
mi_list_varobj_children "psnp->char_ptr.*psnp->char_ptr" {
{{psnp->char_ptr.\*psnp->char_ptr.\*\*psnp->char_ptr} \
{\*\*psnp->char_ptr} 1 {char \*\*}}
} "get children of psnp->char_ptr.*psnp->char_ptr"
# Test: c_variable-5.14
# Desc: number of children of *(psnp->char_ptr)
mi_gdb_test "-var-info-num-children psnp->char_ptr.*psnp->char_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of psnp->char_ptr.*psnp->char_ptr"
# Test: c_variable-5.15
# Desc: children of *(*(psnp->char_ptr))
mi_list_varobj_children "psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr" {
{{psnp->char_ptr.\*psnp->char_ptr.\*\*psnp->char_ptr.\*\*\*psnp->char_ptr} \
{\*\*\*psnp->char_ptr} 1 {char \*}}
} "get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr"
# Test: c_variable-5.15B
# Desc: children of *(*(*(psnp->char_ptr)))
mi_list_varobj_children "psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr" {
{{psnp->char_ptr.\*psnp->char_ptr.\*\*psnp->char_ptr.\*\*\*psnp->char_ptr.\*\*\*\*psnp->char_ptr} \
{\*\*\*\*psnp->char_ptr} 0 char}
} "get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr"
# Test: c_variable-5.16
# Desc: number of children of *(*(psnp->char_ptr))
mi_gdb_test "-var-info-num-children psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr"
# Test: c_variable-5.17
# Desc: children of *(*(*(psnp->char_ptr)))
mi_list_varobj_children "psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr" {
{{psnp->char_ptr.\*psnp->char_ptr.\*\*psnp->char_ptr.\*\*\*psnp->char_ptr.\*\*\*\*psnp->char_ptr} \
{\*\*\*\*psnp->char_ptr} 0 char}
} "get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr after counting children"
# Test: c_variable-5.18
# Desc: number of children of *(*(*(psnp->char_ptr)))
mi_gdb_test "-var-info-num-children psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr"
# Test: c_variable-5.17B
# Desc: children of *(*(*(*(psnp->char_ptr))))
mi_list_varobj_children "psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr" {} \
"get children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr"
# Test: c_variable-5.18B
# Desc: number of children of *(*(*(*(psnp->char_ptr))))
mi_gdb_test "-var-info-num-children psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr" \
"\\^done,numchild=\"0\"" \
"get number of children of psnp->char_ptr.*psnp->char_ptr.**psnp->char_ptr.***psnp->char_ptr.****psnp->char_ptr"
# Test: c_variable-5.19
# Desc: create psnp->long_ptr
mi_create_varobj "psnp->long_ptr" "psnp->long_ptr" \
"create local variable psnp->long_ptr"
# Test: c_variable-5.20
# Desc: children of psnp->long_ptr
mi_list_varobj_children "psnp->long_ptr" {
{{psnp->long_ptr.\*psnp->long_ptr} {\*psnp->long_ptr} 1 {long \*\*\*}}
} "get children of psnp->long_ptr"
# Test: c_variable-5.21
# Desc: number of children of psnp->long_ptr
mi_gdb_test "-var-info-num-children psnp->long_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of psnp->long_ptr"
# Test: c_variable-5.22
# Desc: children of *(psnp->long_ptr)
mi_list_varobj_children "psnp->long_ptr.*psnp->long_ptr" {
{{psnp->long_ptr.\*psnp->long_ptr.\*\*psnp->long_ptr} {\*\*psnp->long_ptr} 1 {long \*\*}}
} "get children of psnp->long_ptr.*psnp->long_ptr"
# Test: c_variable-5.23
# Desc: number of children of *(psnp->long_ptr)
mi_gdb_test "-var-info-num-children psnp->long_ptr.*psnp->long_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of psnp->long_ptr.*psnp->long_ptr"
# Test: c_variable-5.24
# Desc: children of *(*(psnp->long_ptr))
mi_list_varobj_children "psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr" {
{{psnp->long_ptr.\*psnp->long_ptr.\*\*psnp->long_ptr.\*\*\*psnp->long_ptr} \
{\*\*\*psnp->long_ptr} 1 {long \*}}
} "get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr"
# Test: c_variable-5.25
# Desc: number of children of *(*(psnp->long_ptr))
mi_gdb_test "-var-info-num-children psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr"
# Test: c_variable-5.26
# Desc: children of *(*(*(psnp->long_ptr)))
mi_list_varobj_children "psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr" {
{{psnp->long_ptr.\*psnp->long_ptr.\*\*psnp->long_ptr.\*\*\*psnp->long_ptr.\*\*\*\*psnp->long_ptr}
{\*\*\*\*psnp->long_ptr} 0 {long}}
} "get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr"
# Test: c_variable-5.27
# Desc: number of children of *(*(*(psnp->long_ptr)))
mi_gdb_test "-var-info-num-children psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr"
# Test: c_variable-5.28
# Desc: children of *(*(*(*(psnp->long_ptr))))
mi_list_varobj_children "psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr" {} \
"get children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr"
# Test: c_variable-5.29
# Desc: number of children of *(*(*(*(psnp->long_ptr))))
mi_gdb_test "-var-info-num-children psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr" \
"\\^done,numchild=\"0\"" \
"get number of children of psnp->long_ptr.*psnp->long_ptr.**psnp->long_ptr.***psnp->long_ptr.****psnp->long_ptr"
# Test: c_variable-5.30
# Desc: create psnp->ptrs
mi_create_varobj "psnp->ptrs" "psnp->ptrs" \
"create local variable psnp->ptrs"
# Test: c_variable-5.31
# Desc: children of psnp->ptrs
mi_list_varobj_children "psnp->ptrs" {
{psnp->ptrs.0 0 4 {struct _struct_n_pointer \*}}
{psnp->ptrs.1 1 4 {struct _struct_n_pointer \*}}
{psnp->ptrs.2 2 4 {struct _struct_n_pointer \*}}
} "get children of psnp->ptrs"
# Test: c_variable-5.32
# Desc: number of children of psnp->ptrs
mi_gdb_test "-var-info-num-children psnp->ptrs" \
"\\^done,numchild=\"3\"" \
"get number of children of psnp->ptrs"
# Test: c_variable-5.33
# Desc: children of psnp->ptrs[0]
mi_list_varobj_children "psnp->ptrs.0" {
{psnp->ptrs.0.char_ptr char_ptr 1 {char \*\*\*\*}}
{psnp->ptrs.0.long_ptr long_ptr 1 {long \*\*\*\*}}
{psnp->ptrs.0.ptrs ptrs 3 {struct _struct_n_pointer \*\[3\]}}
{psnp->ptrs.0.next next 4 {struct _struct_n_pointer \*}}
} "get children of psnp->ptrs.0"
# Test: c_variable-5.34
# Desc: number of children of psnp->ptrs[0]
mi_gdb_test "-var-info-num-children psnp->ptrs.0" \
"\\^done,numchild=\"4\"" \
"get number of children of psnp->ptrs.0"
# Test: c_variable-5.35
# Desc: children of psnp->ptrs[0]->next
mi_list_varobj_children "psnp->ptrs.0.next" {
{psnp->ptrs.0.next.char_ptr char_ptr 1 {char \*\*\*\*}}
{psnp->ptrs.0.next.long_ptr long_ptr 1 {long \*\*\*\*}}
{psnp->ptrs.0.next.ptrs ptrs 3 {struct _struct_n_pointer \*\[3\]}}
{psnp->ptrs.0.next.next next 4 {struct _struct_n_pointer \*}}
} "get children of psnp->ptrs.0.next"
#} {char_ptr long_ptr ptrs next}
# Test: c_variable-5.36
# Desc: number of children of psnp->ptrs[0]->next
mi_gdb_test "-var-info-num-children psnp->ptrs.0.next" \
"\\^done,numchild=\"4\"" \
"get number of children of psnp->ptrs.0.next"
# Test: c_variable-5.37
# Desc: children of psnp->ptrs[0]->next->char_ptr
mi_list_varobj_children "psnp->ptrs.0.next.char_ptr" {
{{psnp->ptrs.0.next.char_ptr.\*char_ptr} {\*char_ptr} 1 {char \*\*\*}}
} "get children of psnp->ptrs.0.next.char_ptr"
#gdbtk_test c_variable-5.37 {children of psnp->ptrs[0]->next->char_ptr} {
# get_children psnp->ptrs.0.next.char_ptr
#} {*char_ptr}
# Test: c_variable-5.38
# Desc: number of children of psnp->ptrs[0]->next->char_ptr
mi_gdb_test "-var-info-num-children psnp->ptrs.0.next.char_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of psnp->ptrs.0.next.char_ptr"
# Test: c_variable-5.39
# Desc: children of *psnp->ptrs[0]->next->char_ptr
mi_list_varobj_children "psnp->ptrs.0.next.char_ptr.*char_ptr" {
{{psnp->ptrs.0.next.char_ptr.\*char_ptr.\*\*char_ptr} {\*\*char_ptr} 1 {char \*\*}}
} "get children of psnp->ptrs.0.next.char_ptr.*char_ptr"
# Test: c_variable-5.40
# Desc: number of children of *psnp->ptrs[0]->next->char_ptr
mi_gdb_test "-var-info-num-children psnp->ptrs.0.next.char_ptr.*char_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr"
# Test: c_variable-5.41
# Desc: children of **psnp->ptrs[0]->next->char_ptr
mi_list_varobj_children "psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr" {
{{psnp->ptrs.0.next.char_ptr.\*char_ptr.\*\*char_ptr.\*\*\*char_ptr} \
{\*\*\*char_ptr} 1 {char \*}}
} "get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr"
# Test: c_variable-5.41B
# Desc: children of ***psnp->ptrs[0]->next->char_ptr
mi_list_varobj_children "psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr" {
{{psnp->ptrs.0.next.char_ptr.\*char_ptr.\*\*char_ptr.\*\*\*char_ptr.\*\*\*\*char_ptr} \
{\*\*\*\*char_ptr} 0 char}
} "get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr"
# Test: c_variable-5.42
# Desc: number of children of **psnp->ptrs[0]->next->char_ptr
mi_gdb_test "-var-info-num-children psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr"
# Test: c_variable-5.43
# Desc: children of ***psnp->ptrs[0]->next->char_ptr
mi_list_varobj_children "psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr" {
{{psnp->ptrs.0.next.char_ptr.\*char_ptr.\*\*char_ptr.\*\*\*char_ptr.\*\*\*\*char_ptr} \
{\*\*\*\*char_ptr} 0 char}
} "get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr after counting children"
# Test: c_variable-5.44
# Desc: number of children of ***psnp->ptrs[0]->next->char_ptr
mi_gdb_test "-var-info-num-children psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr" \
"\\^done,numchild=\"1\"" \
"get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr"
# Test: c_variable-5.43B
# Desc: children of ****psnp->ptrs[0]->next->char_ptr
mi_list_varobj_children "psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr.****char_ptr" {} \
"get children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr.****char_ptr"
# Test: c_variable-5.44B
# Desc: number of children of ****psnp->ptrs[0]->next->char_ptr
mi_gdb_test "-var-info-num-children psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr.****char_ptr" \
"\\^done,numchild=\"0\"" \
"get number of children of psnp->ptrs.0.next.char_ptr.*char_ptr.**char_ptr.***char_ptr.****char_ptr"
# Test: c_variable-5.45
# Desc: children of psnp->ptrs[0]->next->next
mi_list_varobj_children "psnp->ptrs.0.next.next" {
{psnp->ptrs.0.next.next.char_ptr char_ptr 1 {char \*\*\*\*}}
{psnp->ptrs.0.next.next.long_ptr long_ptr 1 {long \*\*\*\*}}
{psnp->ptrs.0.next.next.ptrs ptrs 3 {struct _struct_n_pointer \*\[3\]}}
{psnp->ptrs.0.next.next.next next 4 {struct _struct_n_pointer \*}}
} "get children of psnp->ptrs.0.next.next"
# Test: c_variable-5.46
# Desc: children of psnp->ptrs[0]->next->next->ptrs
mi_list_varobj_children "psnp->ptrs.0.next.next.ptrs" {
{psnp->ptrs.0.next.next.ptrs.0 0 4 {struct _struct_n_pointer \*}}
{psnp->ptrs.0.next.next.ptrs.1 1 4 {struct _struct_n_pointer \*}}
{psnp->ptrs.0.next.next.ptrs.2 2 4 {struct _struct_n_pointer \*}}
} "get children of psnp->ptrs.0.next.next.ptrs"
# Step over "snp0.char_ptr = &b3;"
mi_step_to do_children_tests {} {.*var-cmd.c} \
[expr $line_dct_snp0 + 2] "step \$line_dct_snp0 + 2"
# Test: c_variable-5.47
# Desc: check that psnp->char_ptr (and [0].char_ptr) changed
mi_varobj_update * {psnp->ptrs.0.char_ptr
psnp->char_ptr
psnp->char_ptr.\\*psnp->char_ptr psnp->char_ptr.\\*psnp->char_ptr.\\*\\*psnp->char_ptr
psnp->char_ptr.\\*psnp->char_ptr.\\*\\*psnp->char_ptr.\\*\\*\\*psnp->char_ptr
psnp->char_ptr.\\*psnp->char_ptr.\\*\\*psnp->char_ptr.\\*\\*\\*psnp->char_ptr.\\*\\*\\*\\*psnp->char_ptr } \
"update all vars psnp->char_ptr (and 0.char_ptr) changed"
# Step over "snp1.char_ptr = &c3;"
mi_step_to do_children_tests {} {.*var-cmd.c} \
[expr $line_dct_snp0 + 3] "step \$line_dct_snp0 + 3"
# Test: c_variable-5.48
# Desc: check that psnp->next->char_ptr (and [1].char_ptr) changed
mi_varobj_update * {psnp->ptrs.0.next.char_ptr
psnp->ptrs.0.next.char_ptr.\\*char_ptr
psnp->ptrs.0.next.char_ptr.\\*char_ptr.\\*\\*char_ptr
psnp->ptrs.0.next.char_ptr.\\*char_ptr.\\*\\*char_ptr.\\*\\*\\*char_ptr
psnp->ptrs.0.next.char_ptr.\\*char_ptr.\\*\\*char_ptr.\\*\\*\\*char_ptr.\\*\\*\\*\\*char_ptr} \
"update all vars psnp->next->char_ptr (and 1.char_ptr) changed"
# Step over "snp2.char_ptr = &a3;"
mi_step_to do_children_tests {} {.*var-cmd.c} \
[expr $line_dct_snp0 + 4] "step \$line_dct_snp0 + 4"
# Test: c_variable-5.49
# Desc: check that psnp->next->next->char_ptr (and [2].char_ptr) changed
mi_varobj_update * {psnp->ptrs.0.next.next.char_ptr} \
"update all vars psnp->next->next->char_ptr (and 2.char_ptr) changed"
# Step over "snp0.long_ptr = &y3;"
mi_step_to do_children_tests {} {.*var-cmd.c} \
[expr $line_dct_snp0 + 5] "step \$line_dct_snp0 + 5"
# Test: c_variable-5.50
# Desc: check that psnp->long_ptr (and [0].long_ptr) changed
mi_varobj_update * {psnp->ptrs.0.long_ptr psnp->long_ptr
psnp->long_ptr.\\*psnp->long_ptr
psnp->long_ptr.\\*psnp->long_ptr.\\*\\*psnp->long_ptr
psnp->long_ptr.\\*psnp->long_ptr.\\*\\*psnp->long_ptr.\\*\\*\\*psnp->long_ptr
psnp->long_ptr.\\*psnp->long_ptr.\\*\\*psnp->long_ptr.\\*\\*\\*psnp->long_ptr.\\*\\*\\*\\*psnp->long_ptr} \
"update all vars psnp->long_ptr (and 0.long_ptr) changed"
# Step over "snp1.long_ptr = &x3;"
mi_step_to do_children_tests {} {.*var-cmd.c} \
[expr $line_dct_snp0 + 6] "step \$line_dct_snp0 + 6"
# Test: c_variable-5.51
# Desc: check that psnp->next->long_ptr (and [1].long_ptr) changed
# Why does this have a FIXME?
setup_xfail *-*-*
mi_gdb_test "-var-update *" \
"FIXME\\^done,changelist=\\\[\{name=\"psnp->ptrs.0.next.long_ptr\",in_scope=\"true\",type_changed=\"false\",has_more=\"0\"\}\\\]" \
"update all vars psnp->next->long_ptr (and 1.long_ptr) changed"
clear_xfail *-*-*
# This command produces this error message:
# &"warning: varobj_list: assertion failed - mycount <> 0\n"
#
# Step over "snp2.long_ptr = &z3;"
mi_step_to do_children_tests {} {.*var-cmd.c} \
[expr $line_dct_snp0 + 7] "step \$line_dct_snp0 + 7"
# Test: c_variable-5.52
# Desc: check that psnp->next->next->long_ptr (and [2].long_ptr) changed
mi_varobj_update * {psnp->ptrs.0.next.next.long_ptr} \
"update all vars psnp->next->next->long_ptr (and 2.long_ptr) changed"
# Anonymous type tests
proc verify_everything {variable_name} {
# Test -var-list-children
mi_varobj_tree_test_children_callback $variable_name
# Bring the variable named by VARIABLE_NAME into the current scope
# in VAROBJ.
upvar #0 $variable_name varobj
# Test -var-info-path-expression
mi_gdb_test "-var-info-path-expression $varobj(obj_name)" \
"\\^done,path_expr=\"[string_to_regexp $varobj(path_expr)]\"" \
"path expression for $varobj(obj_name)"
# Test -var-info-expression
mi_gdb_test "-var-info-expression $varobj(obj_name)" \
"\\^done,lang=\"C\",exp=\"[string_to_regexp $varobj(display_name)]\"" \
"expression for $varobj(obj_name)"
}
set lineno [gdb_get_line_number "anonymous type tests breakpoint"]
mi_create_breakpoint \
"$srcfile:$lineno" "break in do_anonymous_type_tests" \
-disp keep -func do_anonymous_type_tests \
-file ".*var-cmd.c" -line $lineno
set lineno [gdb_get_line_number "nested struct union tests breakpoint"]
mi_create_breakpoint \
"$srcfile:$lineno" "break in do_nested_struct_union_tests" \
-disp keep -func do_nested_struct_union_tests \
-file ".*var-cmd.c" -line $lineno
mi_execute_to "exec-continue" "breakpoint-hit" "do_anonymous_type_tests" ""\
".*" ".*" {"" "disp=\"keep\""} \
"continue to do_anonymous_type_tests breakpoint"
# Run the varobj tree on variable "ptr".
set tree {
{struct anonymous **} ptr {
{struct anonymous *} {*ptr} {
int a {}
anonymous struct {
int b {}
{char *} c {
char {*c} {}
}
anonymous union {
int d {}
{void *} e {}
char f {}
anonymous struct {
char g {}
{const char **} h {
{const char *} {*h} {
{const char} {**h} {}
}
}
{simpleton ***} simple {
{simpleton **} {*simple} {
{simpleton *} {**simple} {
int integer {}
{unsigned int} unsigned_integer {}
char character {}
{signed char} signed_character {}
{char *} char_ptr {
char {*char_ptr} {}
}
{int [10]} array_of_10 {
int 0 {}
int 1 {}
int 2 {}
int 3 {}
int 4 {}
int 5 {}
int 6 {}
int 7 {}
int 8 {}
int 9 {}
}
}
}
}
}
}
}
}
}
}
mi_walk_varobj_tree c $tree verify_everything
set tree {
{struct {...}} v {
int x {}
anonymous struct {
int a {}
}
anonymous struct {
int b {}
}
}
}
mi_walk_varobj_tree c $tree verify_everything
mi_send_resuming_command "exec-continue" \
"continuing execution to enter do_nested_struct_union_tests"
mi_expect_stop "breakpoint-hit" "do_nested_struct_union_tests" ".*" ".*" ".*" \
{.* disp="keep"} "Run till MI stops in do_nested_struct_union_tests"
set struct_ss_tree {
{struct s_a} a1 {
int a {}
}
{struct s_b} b1 {
int b {}
}
{union u_ab} u1 {
{struct s_a} a {
int a {}
}
{struct s_b} b {
int b {}
}
}
anonymous union {
{struct s_a} a2 {
int a {}
}
{struct s_b} b2 {
int b {}
}
}
{union {...}} u2 {
{struct s_a} a3 {
int a {}
}
{struct s_b} b3 {
int b {}
}
}
}
set tree "
{struct ss} var {
$struct_ss_tree
}
"
mi_walk_varobj_tree c $tree verify_everything
set tree {
{struct {...}} var2 {
{td_u_ab} ab {
{td_s_a} a {
int a {}
}
{td_s_b} b {
int b {}
}
}
}
}
mi_walk_varobj_tree c $tree verify_everything
set tree "
{struct ss *} ss_ptr {
$struct_ss_tree
}
"
mi_walk_varobj_tree c $tree verify_everything
mi_gdb_exit
return 0