mi-var-child.c revision 1.1.1.1
1/* Copyright 1999, 2004, 2005, 2007, 2008, 2009, 2010, 2011 2Free Software Foundation, Inc. 3 4 This file is part of GDB. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 18 19#include <stdlib.h> 20#include <string.h> 21 22struct _simple_struct { 23 int integer; 24 unsigned int unsigned_integer; 25 char character; 26 signed char signed_character; 27 char *char_ptr; 28 int array_of_10[10]; 29}; 30 31typedef struct _simple_struct simpleton; 32 33simpleton global_simple; 34 35enum foo { 36 bar = 1, 37 baz 38}; 39 40typedef enum foo efoo; 41 42union named_union 43{ 44 int integer; 45 char *char_ptr; 46}; 47 48typedef struct _struct_decl { 49 int integer; 50 char character; 51 char *char_ptr; 52 long long_int; 53 int **int_ptr_ptr; 54 long long_array[12]; 55 56 void (*func_ptr) (void); 57 struct _struct_decl (*func_ptr_struct) (int, char *, long); 58 struct _struct_decl *(*func_ptr_ptr) (int, char *, long); 59 union { 60 int a; 61 char *b; 62 long c; 63 enum foo d; 64 } u1; 65 66 struct { 67 union { 68 struct { 69 int d; 70 char e[10]; 71 int *(*func) (void); 72 efoo foo; 73 } u1s1; 74 75 long f; 76 struct { 77 char array_ptr[2]; 78 int (*func) (int, char *); 79 } u1s2; 80 } u2; 81 82 int g; 83 char h; 84 long i[10]; 85 } s2; 86} weird_struct; 87 88struct _struct_n_pointer { 89 char ****char_ptr; 90 long ****long_ptr; 91 struct _struct_n_pointer *ptrs[3]; 92 struct _struct_n_pointer *next; 93}; 94 95void do_locals_tests (void); 96void do_block_tests (void); 97void subroutine1 (int, long *); 98void nothing (void); 99void do_children_tests (void); 100void do_special_tests (void); 101void incr_a (char); 102 103void incr_a (char a) 104{ 105 int b; 106 b = a; 107} 108 109void 110do_locals_tests () 111{ 112 int linteger; 113 int *lpinteger; 114 char lcharacter; 115 char *lpcharacter; 116 long llong; 117 long *lplong; 118 float lfloat; 119 float *lpfloat; 120 double ldouble; 121 double *lpdouble; 122 struct _simple_struct lsimple; 123 struct _simple_struct *lpsimple; 124 void (*func) (void); 125 126 /* Simple assignments */ 127 linteger = 1234; 128 lpinteger = &linteger; 129 lcharacter = 'a'; 130 lpcharacter = &lcharacter; 131 llong = 2121L; 132 lplong = &llong; 133 lfloat = 2.1; 134 lpfloat = &lfloat; 135 ldouble = 2.718281828459045; 136 lpdouble = &ldouble; 137 lsimple.integer = 1234; 138 lsimple.unsigned_integer = 255; 139 lsimple.character = 'a'; 140 lsimple.signed_character = 21; 141 lsimple.char_ptr = &lcharacter; 142 lpsimple = &lsimple; 143 func = nothing; 144 145 /* Check pointers */ 146 linteger = 4321; 147 lcharacter = 'b'; 148 llong = 1212L; 149 lfloat = 1.2; 150 ldouble = 5.498548281828172; 151 lsimple.integer = 255; 152 lsimple.unsigned_integer = 4321; 153 lsimple.character = 'b'; 154 lsimple.signed_character = 0; 155 156 subroutine1 (linteger, &llong); 157} 158 159void 160nothing () 161{ 162} 163 164void 165subroutine1 (int i, long *l) 166{ 167 global_simple.integer = i + 3; 168 i = 212; 169 *l = 12; 170} 171 172void 173do_block_tests () 174{ 175 int cb = 12; 176 177 { 178 int foo; 179 foo = 123; 180 { 181 int foo2; 182 foo2 = 123; 183 { 184 int foo; 185 foo = 321; 186 } 187 foo2 = 0; 188 } 189 foo = 0; 190 } 191 192 cb = 21; 193} 194 195void 196do_children_tests (void) 197{ 198 weird_struct *weird; 199 struct _struct_n_pointer *psnp; 200 struct _struct_n_pointer snp0, snp1, snp2; 201 char a0[2] = {}, *a1, **a2, ***a3; 202 char b0[2] = {}, *b1, **b2, ***b3; 203 char c0[2] = {}, *c1, **c2, ***c3; 204 long z0, *z1, **z2, ***z3; 205 long y0, *y1, **y2, ***y3; 206 long x0, *x1, **x2, ***x3; 207 int *foo; 208 int bar; 209 210 /* Avoid pointing into NULL, as that is editable on some 211 systems. */ 212 int dummy; 213 int *dummy_ptr = &dummy; 214 215 struct _struct_decl struct_declarations = { 0, 0, NULL, 0, &dummy_ptr }; 216 weird = &struct_declarations; 217 218 struct_declarations.integer = 123; 219 weird->char_ptr = "hello"; 220 bar = 2121; 221 foo = &bar; 222 struct_declarations.int_ptr_ptr = &foo; 223 weird->long_array[0] = 1234; 224 struct_declarations.long_array[1] = 2345; 225 weird->long_array[2] = 3456; 226 struct_declarations.long_array[3] = 4567; 227 weird->long_array[4] = 5678; 228 struct_declarations.long_array[5] = 6789; 229 weird->long_array[6] = 7890; 230 struct_declarations.long_array[7] = 8901; 231 weird->long_array[8] = 9012; 232 struct_declarations.long_array[9] = 1234; 233 234 weird->func_ptr = nothing; 235 struct_declarations.long_array[10] = 3456; 236 struct_declarations.long_array[11] = 5678; 237 238 /* Struct/pointer/array tests */ 239 a0[0] = '0'; 240 a1 = a0; 241 a2 = &a1; 242 a3 = &a2; 243 b0[0] = '1'; 244 b1 = b0; 245 b2 = &b1; 246 b3 = &b2; 247 c0[1] = '2'; 248 c1 = c0; 249 c2 = &c1; 250 c3 = &c2; 251 z0 = 0xdead + 0; 252 z1 = &z0; 253 z2 = &z1; 254 z3 = &z2; 255 y0 = 0xdead + 1; 256 y1 = &y0; 257 y2 = &y1; 258 y3 = &y2; 259 x0 = 0xdead + 2; 260 x1 = &x0; 261 x2 = &x1; 262 x3 = &x2; 263 snp0.char_ptr = &a3; 264 snp0.long_ptr = &z3; 265 snp0.ptrs[0] = &snp0; 266 snp0.ptrs[1] = &snp1; 267 snp0.ptrs[2] = &snp2; 268 snp0.next = &snp1; 269 snp1.char_ptr = &b3; 270 snp1.long_ptr = &y3; 271 snp1.ptrs[0] = &snp0; 272 snp1.ptrs[1] = &snp1; 273 snp1.ptrs[2] = &snp2; 274 snp1.next = &snp2; 275 snp2.char_ptr = &c3; 276 snp2.long_ptr = &x3; 277 snp2.ptrs[0] = &snp0; 278 snp2.ptrs[1] = &snp1; 279 snp2.ptrs[2] = &snp2; 280 snp2.next = 0x0; 281 psnp = &snp0; 282 snp0.char_ptr = &b3; 283 snp1.char_ptr = &c3; 284 snp2.char_ptr = &a3; 285 snp0.long_ptr = &y3; 286 snp1.long_ptr = &x3; 287 snp2.long_ptr = &z3; 288} 289 290void 291do_special_tests (void) 292{ 293 union named_union u; 294 union { 295 int a; 296 char b; 297 long c; 298 } anonu; 299 struct _simple_struct s; 300 struct { 301 int a; 302 char b; 303 long c; 304 } anons; 305 enum foo e; 306 enum { A, B, C } anone; 307 int array[21]; 308 int a; 309 310 a = 1; 311 incr_a(2); 312} 313 314struct very_simple_struct 315{ 316 int a; 317 int b; 318}; 319 320int 321do_child_deletion (void) 322{ 323 /*: BEGIN: child_deletion :*/ 324 struct very_simple_struct s = {1, 2}; 325 /*: 326 mi_create_varobj S s "create varobj for s" 327 mi_list_varobj_children S {{S.a a 0 int} {S.b b 0 int}} \ 328 "list children of S" 329 mi_delete_varobj S.a "delete S.a" 330 mi_delete_varobj S.b "delete S.b" 331 mi_delete_varobj S "delete S" 332 :*/ 333 return 99; 334 /*: END: child_deletion :*/ 335} 336 337int 338main (int argc, char *argv []) 339{ 340 do_locals_tests (); 341 do_block_tests (); 342 do_children_tests (); 343 do_special_tests (); 344 do_child_deletion (); 345 exit (0); 346} 347 348 349