]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blob - gdb/testsuite/gdb.cp/inherit.exp
2004-02-11 Michael Chastain <mec.gnu@mindspring.com>
[thirdparty/binutils-gdb.git] / gdb / testsuite / gdb.cp / inherit.exp
1 # Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003,
2 # 2004 Free Software Foundation, Inc.
3
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 2 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program; if not, write to the Free Software
16 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17
18 # This file was written by Fred Fish. (fnf@cygnus.com)
19 # And rewritten by Michael Chastain. (mec.gnu@mindspring.com)
20
21 set ws "\[\r\n\t \]+"
22 set nl "\[\r\n\]+"
23 set vhn "\\$\[0-9\]+"
24
25 if $tracelevel then {
26 strace $tracelevel
27 }
28
29 if { [skip_cplus_tests] } { continue }
30
31 set testfile "inherit"
32 set srcfile misc.cc
33 set binfile ${objdir}/${subdir}/${testfile}
34
35 if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
36 gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
37 }
38
39 # Single inheritance, print type definitions.
40
41 proc test_ptype_si { } {
42 global gdb_prompt
43 global ws
44 global nl
45
46 # Print class A as a type.
47
48 set re_class "class A \{${ws}public:"
49 set re_fields "int a;${ws}int x;"
50 set re_synth_gcc_23 "A & operator=\\(A const ?&\\);${ws}A\\(A const ?&\\);${ws}A\\((void|)\\);"
51
52 set name "ptype A (FIXME)"
53 gdb_test_multiple "ptype A" $name {
54 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
55 pass $name
56 }
57 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
58 pass $name
59 }
60 }
61
62 # Print class A as an explicit class.
63
64 set name "ptype class A (FIXME)"
65 gdb_test_multiple "ptype class A" $name {
66 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
67 pass $name
68 }
69 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
70 pass $name
71 }
72 }
73
74 # Print type of an object of type A.
75
76 set name "ptype g_A (FIXME)"
77 gdb_test_multiple "ptype g_A" $name {
78 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
79 pass $name
80 }
81 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
82 pass $name
83 }
84 }
85
86 # Print class B as a type.
87
88 set re_class "class B : public A \{${ws}public:"
89 set re_fields "int b;${ws}int x;"
90 set re_synth_gcc_23 "B & operator=\\(B const ?&\\);${ws}B\\(B const ?&\\);${ws}B\\((void|)\\);"
91
92 set name "ptype B"
93 gdb_test_multiple "ptype B" $name {
94 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
95 pass $name
96 }
97 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
98 pass $name
99 }
100 }
101
102 # Print class B as an explicit class.
103
104 set name "ptype class B"
105 gdb_test_multiple "ptype class B" $name {
106 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
107 pass $name
108 }
109 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
110 pass $name
111 }
112 }
113
114 # Print type of an object of type B.
115
116 set name "ptype g_B"
117 gdb_test_multiple "ptype g_B" $name {
118 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
119 pass $name
120 }
121 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
122 pass $name
123 }
124 }
125
126 # Print class C as a type.
127
128 set re_class "class C : public A \{${ws}public:"
129 set re_fields "int c;${ws}int x;"
130 set re_synth_gcc_23 "C & operator=\\(C const ?&\\);${ws}C\\(C const ?&\\);${ws}C\\((void|)\\);"
131
132 set name "ptype C"
133 gdb_test_multiple "ptype C" $name {
134 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
135 pass $name
136 }
137 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
138 pass $name
139 }
140 }
141
142 # Print class C as an explicit class.
143
144 set name "ptype class C"
145 gdb_test_multiple "ptype class C" $name {
146 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
147 pass $name
148 }
149 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
150 pass $name
151 }
152 }
153
154 # Print type of an object of type g_C.
155
156 set name "ptype g_C"
157 gdb_test_multiple "ptype g_C" $name {
158 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
159 pass $name
160 }
161 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
162 pass $name
163 }
164 }
165
166 # Print a structure with no tag.
167
168 set re_tag "tagless_struct"
169 set XX_tag "\\._1"
170 set re_class "(class $re_tag \{${ws}public:|class \{${ws}public:|struct $re_tag \{|struct \{)"
171 set XX_class "(class $XX_tag \{${ws}public:|struct $XX_tag \{)"
172 set re_fields "int one;${ws}int two;"
173 set re_synth_gcc_23 "$re_tag & operator=\\($re_tag const ?&\\);${ws}$re_tag\\($re_tag const ?&\\);${ws}$re_tag\\((void|)\\);"
174 set XX_synth_gcc_23 "($re_tag|$XX_tag) & operator=\\($XX_tag const ?&\\);${ws}$XX_tag\\($XX_tag const ?&\\);${ws}$XX_tag\\((void|)\\);"
175
176 set name "ptype tagless struct"
177 gdb_test_multiple "ptype tagless_struct" $name {
178 -re "type = $XX_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
179 # gcc 2.95.3 -gdwarf-2
180 pass "$name (obsolete gcc or gdb)"
181 }
182 -re "type = $re_class${ws}$re_fields${ws}$XX_synth_gcc_23$nl\}$nl$gdb_prompt $" {
183 # gcc 2.95.3 -gstabs+
184 pass "$name (obsolete gcc or gdb)"
185 }
186 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
187 # gcc 3.3.2 -gdwarf-2
188 # gcc HEAD 2004-01-21 -gdwarf-2
189 pass "$name (obsolete gcc or gdb)"
190 }
191 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
192 # gcc 3.3.2 -gstabs+
193 # gcc HEAD 2004-01-21 -gstabs+
194 pass "$name"
195 }
196 }
197
198 set name "ptype variable of type tagless struct"
199 gdb_test_multiple "ptype v_tagless" $name {
200 -re "type = $XX_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
201 # gcc 2.95.3 -gdwarf-2
202 pass "$name (obsolete gcc or gdb)"
203 }
204 -re "type = $re_class${ws}$re_fields${ws}$XX_synth_gcc_23$nl\}$nl$gdb_prompt $" {
205 # gcc 2.95.3 -gstabs+
206 pass "$name (obsolete gcc or gdb)"
207 }
208 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
209 # gcc 3.3.2 -gdwarf-2
210 # gcc HEAD 2004-01-21 -gdwarf-2
211 pass "$name (obsolete gcc or gdb)"
212 }
213 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
214 # gcc 3.3.2 -gstabs+
215 # gcc HEAD 2004-01-21 -gstabs+
216 pass "$name"
217 }
218 }
219 }
220
221 # Multiple inheritance, print type definitions.
222
223 proc test_ptype_mi { } {
224 global gdb_prompt
225 global ws
226 global nl
227
228 set re_class "class D : public B, public C \{${ws}public:"
229 set re_fields "int d;${ws}int x;"
230 set re_synth_gcc_23 "D & operator=\\(D const ?&\\);${ws}D\\(D const ?&\\);${ws}D\\((void|)\\);"
231
232 # ptype D: type, class, object.
233
234 set name "ptype D"
235 gdb_test_multiple "ptype D" $name {
236 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
237 pass $name
238 }
239 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
240 pass $name
241 }
242 }
243
244 set name "ptype class D"
245 gdb_test_multiple "ptype class D" $name {
246 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
247 pass $name
248 }
249 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
250 pass $name
251 }
252 }
253
254 set name "ptype g_D"
255 gdb_test_multiple "ptype g_D" $name {
256 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
257 pass $name
258 }
259 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
260 pass $name
261 }
262 }
263
264 set re_class "class E : public D \{${ws}public:"
265 set re_fields "int e;${ws}int x;"
266 set re_synth_gcc_23 "E & operator=\\(E const ?&\\);${ws}E\\(E const ?&\\);${ws}E\\((void|)\\);"
267
268 # ptype E: type, class, object.
269
270 set name "ptype E"
271 gdb_test_multiple "ptype E" $name {
272 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
273 pass $name
274 }
275 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
276 pass $name
277 }
278 }
279
280 set name "ptype class E"
281 gdb_test_multiple "ptype class E" $name {
282 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
283 pass $name
284 }
285 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
286 pass $name
287 }
288 }
289
290 set name "ptype g_E"
291 gdb_test_multiple "ptype g_E" $name {
292 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
293 pass $name
294 }
295 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
296 pass $name
297 }
298 }
299 }
300
301 # Single virtual inheritance, print type definitions.
302
303 proc test_ptype_vi { } {
304 global gdb_prompt
305 global ws
306 global nl
307
308 # ptype vA: type, class, object.
309
310 set re_class "class vA \{${ws}public:"
311 set re_fields "int va;${ws}int vx;"
312 set re_synth_gcc_23 "vA & operator=\\(vA const ?&\\);${ws}vA\\(vA const ?&\\);${ws}vA\\((void|)\\);"
313
314 set name "ptype vA"
315 gdb_test_multiple "ptype vA" $name {
316 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
317 pass $name
318 }
319 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
320 pass $name
321 }
322 }
323
324 set name "ptype class vA"
325 gdb_test_multiple "ptype class vA" $name {
326 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
327 pass $name
328 }
329 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
330 pass $name
331 }
332 }
333
334 set name "ptype g_vA"
335 gdb_test_multiple "ptype g_vA" $name {
336 -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
337 pass $name
338 }
339 -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
340 pass $name
341 }
342 }
343
344 # ptype vB: type, class, object.
345
346 set re_class "class vB : public virtual vA \{(${ws}private:|)"
347 set re_vbptr "vA \\*(_vb.2vA|_vb.vA);${ws}"
348 set re_access "public:"
349 set re_fields "int vb;${ws}int vx;"
350 set re_synth_gcc_2 "vB & operator=\\(vB const ?&\\);${ws}vB\\(int, vB const ?&\\);${ws}vB\\(int\\);"
351 set re_synth_gcc_3 "vB & operator=\\(vB const ?&\\);${ws}vB\\(vB const ?&\\);${ws}vB\\((void|)\\);"
352
353 set name "ptype vB"
354 gdb_test_multiple "ptype vB" $name {
355 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
356 # gcc 2.95.3 -gdwarf-2
357 pass $name
358 }
359 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
360 # gcc 2.95.3 -gstabs+
361 pass $name
362 }
363 -re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
364 # gcc 3.3.2 -gdwarf-2
365 # gcc HEAD 2004-01-21 -gdwarf-2
366 pass "$name (aCC)"
367 }
368 -re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
369 # gcc 3.3.2 -gstabs+
370 # gcc HEAD 2004-01-21 -gstabs+
371 pass "$name (aCC)"
372 }
373 }
374
375 set name "ptype class vB"
376 gdb_test_multiple "ptype class vB" $name {
377 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
378 # gcc 2.95.3 -gdwarf-2
379 pass $name
380 }
381 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
382 # gcc 2.95.3 -gstabs+
383 pass $name
384 }
385 -re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
386 # gcc 3.3.2 -gdwarf-2
387 # gcc HEAD 2004-01-21 -gdwarf-2
388 pass "$name (aCC)"
389 }
390 -re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
391 # gcc 3.3.2 -gstabs+
392 # gcc HEAD 2004-01-21 -gstabs+
393 pass "$name (aCC)"
394 }
395 }
396
397 set name "ptype g_vB"
398 gdb_test_multiple "ptype g_vB" $name {
399 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
400 # gcc 2.95.3 -gdwarf-2
401 pass $name
402 }
403 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
404 # gcc 2.95.3 -gstabs+
405 pass $name
406 }
407 -re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
408 # gcc 3.3.2 -gdwarf-2
409 # gcc HEAD 2004-01-21 -gdwarf-2
410 pass "$name (aCC)"
411 }
412 -re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
413 # gcc 3.3.2 -gstabs+
414 # gcc HEAD 2004-01-21 -gstabs+
415 pass "$name (aCC)"
416 }
417 }
418
419 # ptype vC: type, class, object.
420
421 set re_class "class vC : public virtual vA \{(${ws}private:|)"
422 set re_vbptr "vA \\*(_vb.2vA|_vb.vA);${ws}"
423 set re_access "public:"
424 set re_fields "int vc;${ws}int vx;"
425 set re_synth_gcc_2 "vC & operator=\\(vC const ?&\\);${ws}vC\\(int, vC const ?&\\);${ws}vC\\(int\\);"
426 set re_synth_gcc_3 "vC & operator=\\(vC const ?&\\);${ws}vC\\(vC const ?&\\);${ws}vC\\((void|)\\);"
427
428 set name "ptype vC"
429 gdb_test_multiple "ptype vC" $name {
430 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
431 # gcc 2.95.3 -gdwarf-2
432 pass $name
433 }
434 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
435 # gcc 2.95.3 -gstabs+
436 pass $name
437 }
438 -re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
439 # gcc 3.3.2 -gdwarf-2
440 # gcc HEAD 2004-01-21 -gdwarf-2
441 pass "$name (aCC)"
442 }
443 -re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
444 # gcc 3.3.2 -gstabs+
445 # gcc HEAD 2004-01-21 -gstabs+
446 pass "$name (aCC)"
447 }
448 }
449
450 set name "ptype class vC"
451 gdb_test_multiple "ptype class vC" $name {
452 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
453 # gcc 2.95.3 -gdwarf-2
454 pass $name
455 }
456 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
457 # gcc 2.95.3 -gstabs+
458 pass $name
459 }
460 -re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
461 # gcc 3.3.2 -gdwarf-2
462 # gcc HEAD 2004-01-21 -gdwarf-2
463 pass "$name (aCC)"
464 }
465 -re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
466 # gcc 3.3.2 -gstabs+
467 # gcc HEAD 2004-01-21 -gstabs+
468 pass "$name (aCC)"
469 }
470 }
471
472 set name "ptype g_vC"
473 gdb_test_multiple "ptype g_vC" $name {
474 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
475 # gcc 2.95.3 -gdwarf-2
476 pass $name
477 }
478 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
479 # gcc 2.95.3 -gstabs+
480 pass $name
481 }
482 -re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
483 # gcc 3.3.2 -gdwarf-2
484 # gcc HEAD 2004-01-21 -gdwarf-2
485 pass "$name (aCC)"
486 }
487 -re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
488 # gcc 3.3.2 -gstabs+
489 # gcc HEAD 2004-01-21 -gstabs+
490 pass "$name (aCC)"
491 }
492 }
493 }
494
495 # Multiple virtual inheritance, print type definitions.
496
497 proc test_ptype_mvi { } {
498 global gdb_prompt
499 global ws
500 global nl
501
502 # ptype vD: type, class, object.
503
504 set re_class "class vD : public virtual vB, public virtual vC \{(${ws}private:|)"
505 set re_vbptr "vC \\*(_vb.2vC|_vb.vC);${ws}vB \\*(_vb.2vB|_vb.vB);"
506 set re_access "public:"
507 set re_fields "int vd;${ws}int vx;"
508 set re_synth_gcc_2 "vD & operator=\\(vD const ?&\\);${ws}vD\\(int, vD const ?&\\);${ws}vD\\(int\\);"
509 set re_synth_gcc_3 "vD & operator=\\(vD const ?&\\);${ws}vD\\(vD const ?&\\);${ws}vD\\((void|)\\);"
510
511 set name "ptype vD"
512 gdb_test_multiple "ptype vD" $name {
513 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
514 # gcc 2.95.3 -gdwarf-2
515 pass $name
516 }
517 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
518 # gcc 2.95.3 -gstabs+
519 pass $name
520 }
521 -re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
522 # gcc 3.3.2 -gdwarf-2
523 # gcc HEAD 2004-01-21 -gdwarf-2
524 pass "$name"
525 }
526 -re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
527 # gcc 3.3.2 -gstabs+
528 # gcc HEAD 2004-01-21 -gstabs+
529 pass "$name"
530 }
531 }
532
533 set name "ptype class vD"
534 gdb_test_multiple "ptype class vD" $name {
535 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
536 # gcc 2.95.3 -gdwarf-2
537 pass $name
538 }
539 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
540 # gcc 2.95.3 -gstabs+
541 pass $name
542 }
543 -re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
544 # gcc 3.3.2 -gdwarf-2
545 # gcc HEAD 2004-01-21 -gdwarf-2
546 pass "$name"
547 }
548 -re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
549 # gcc 3.3.2 -gstabs+
550 # gcc HEAD 2004-01-21 -gstabs+
551 pass "$name"
552 }
553 }
554
555 set name "ptype g_vD"
556 gdb_test_multiple "ptype g_vD" $name {
557 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
558 # gcc 2.95.3 -gdwarf-2
559 pass $name
560 }
561 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
562 # gcc 2.95.3 -gstabs+
563 pass $name
564 }
565 -re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
566 # gcc 3.3.2 -gdwarf-2
567 # gcc HEAD 2004-01-21 -gdwarf-2
568 pass "$name"
569 }
570 -re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
571 # gcc 3.3.2 -gstabs+
572 # gcc HEAD 2004-01-21 -gstabs+
573 pass "$name"
574 }
575 }
576
577 # ptype vE: type, class, object.
578
579 set re_class "class vE : public virtual vD \{(${ws}private:|)"
580 set re_vbptr "vD \\*(_vb.2vD|_vb.vD);"
581 set re_access "public:"
582 set re_fields "int ve;${ws}int vx;"
583 set re_synth_gcc_2 "vE & operator=\\(vE const ?&\\);${ws}vE\\(int, vE const ?&\\);${ws}vE\\(int\\);"
584 set re_synth_gcc_3 "vE & operator=\\(vE const ?&\\);${ws}vE\\(vE const ?&\\);${ws}vE\\((void|)\\);"
585
586 set name "ptype vE"
587 gdb_test_multiple "ptype vE" $name {
588 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
589 # gcc 2.95.3 -gdwarf-2
590 pass $name
591 }
592 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
593 # gcc 2.95.3 -gstabs+
594 pass $name
595 }
596 -re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
597 # gcc 3.3.2 -gdwarf-2
598 # gcc HEAD 2004-01-21 -gdwarf-2
599 pass "$name"
600 }
601 -re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
602 # gcc 3.3.2 -gstabs+
603 # gcc HEAD 2004-01-21 -gstabs+
604 pass "$name"
605 }
606 }
607
608 set name "ptype class vE"
609 gdb_test_multiple "ptype class vE" $name {
610 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
611 # gcc 2.95.3 -gdwarf-2
612 pass $name
613 }
614 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
615 # gcc 2.95.3 -gstabs+
616 pass $name
617 }
618 -re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
619 # gcc 3.3.2 -gdwarf-2
620 # gcc HEAD 2004-01-21 -gdwarf-2
621 pass "$name"
622 }
623 -re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
624 # gcc 3.3.2 -gstabs+
625 # gcc HEAD 2004-01-21 -gstabs+
626 pass "$name"
627 }
628 }
629
630 set name "ptype g_vE"
631 gdb_test_multiple "ptype g_vE" $name {
632 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
633 # gcc 2.95.3 -gdwarf-2
634 pass $name
635 }
636 -re "type = $re_class${ws}$re_vbptr${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_2$nl\}$nl$gdb_prompt $" {
637 # gcc 2.95.3 -gstabs+
638 pass $name
639 }
640 -re "type = $re_class${ws}$re_access${ws}$re_fields$nl\}$nl$gdb_prompt $" {
641 # gcc 3.3.2 -gdwarf-2
642 # gcc HEAD 2004-01-21 -gdwarf-2
643 pass "$name"
644 }
645 -re "type = $re_class${ws}$re_access${ws}$re_fields${ws}$re_synth_gcc_3$nl\}$nl$gdb_prompt $" {
646 # gcc 3.3.2 -gstabs+
647 # gcc HEAD 2004-01-21 -gstabs+
648 pass "$name"
649 }
650 }
651 }
652
653 # Single inheritance, print individual members.
654
655 proc test_print_si_members { } {
656 global vhn
657
658 # Print all members of g_A using fully qualified form.
659 gdb_test "print g_A.A::a" "$vhn = 1"
660 gdb_test "print g_A.A::x" "$vhn = 2"
661
662 # Print members of g_A using nonambiguous compact form.
663 gdb_test "print g_A.a" "$vhn = 1"
664 gdb_test "print g_A.x" "$vhn = 2"
665
666 # Print all members of g_B using fully qualified form.
667 gdb_test "print g_B.A::a" "$vhn = 3"
668 gdb_test "print g_B.A::x" "$vhn = 4"
669 gdb_test "print g_B.B::b" "$vhn = 5"
670 gdb_test "print g_B.B::x" "$vhn = 6"
671
672 # Print members of g_B using nonambiguous compact form.
673 gdb_test "print g_B.a" "$vhn = 3"
674 gdb_test "print g_B.b" "$vhn = 5"
675 gdb_test "print g_B.x" "$vhn = 6"
676
677 # Print all members of g_C using fully qualified form.
678 gdb_test "print g_C.A::a" "$vhn = 7"
679 gdb_test "print g_C.A::x" "$vhn = 8"
680 gdb_test "print g_C.C::c" "$vhn = 9"
681 gdb_test "print g_C.C::x" "$vhn = 10"
682
683 # Print members of g_C using nonambiguous compact form.
684 gdb_test "print g_C.a" "$vhn = 7"
685 gdb_test "print g_C.c" "$vhn = 9"
686 gdb_test "print g_C.x" "$vhn = 10"
687 }
688
689 # Single inheritance, print complete classes.
690
691 proc test_print_si_classes { } {
692 global vhn
693
694 # Print all members of g_A, g_B, g_C.
695 gdb_test "print g_A" "$vhn = \{a = 1, x = 2\}"
696 gdb_test "print g_B" "$vhn = \{<(class A|A)> = \{a = 3, x = 4\}, b = 5, x = 6\}"
697 gdb_test "print g_C" "$vhn = \{<(class A|A)> = \{a = 7, x = 8\}, c = 9, x = 10\}"
698 }
699
700 # Multiple inheritance, print individual members.
701
702 proc test_print_mi_members {} {
703 global gdb_prompt
704 global nl
705 global vhn
706
707 # Print all members of g_A.
708 gdb_test "print g_A.A::a" "$vhn = 1"
709 gdb_test "print g_A.A::x" "$vhn = 2"
710
711 # Print all members of g_B.
712 gdb_test "print g_B.A::a" "$vhn = 3"
713 gdb_test "print g_B.A::x" "$vhn = 4"
714 gdb_test "print g_B.B::b" "$vhn = 5"
715 gdb_test "print g_B.B::x" "$vhn = 6"
716
717 # Print all members of g_C.
718 gdb_test "print g_C.A::a" "$vhn = 7"
719 gdb_test "print g_C.A::x" "$vhn = 8"
720 gdb_test "print g_C.C::c" "$vhn = 9"
721 gdb_test "print g_C.C::x" "$vhn = 10"
722
723 # Print all members of g_D.
724 #
725 # g_D.A::a and g_D.A::x are ambiguous member accesses, and gdb
726 # should detect these. There are no ways to PASS these tests
727 # because I don't know what the gdb message will be. -- chastain
728 # 2004-01-27.
729
730 set name "print g_D.A::a"
731 gdb_test_multiple "print g_D.A::a" $name {
732 -re "$vhn = (15|11)$nl$gdb_prompt $" {
733 kfail "gdb/68" "print g_D.A::a"
734 }
735 }
736
737 set name "print g_D.A::x"
738 gdb_test_multiple "print g_D.A::x" $name {
739 -re "$vhn = (16|12)$nl$gdb_prompt $" {
740 kfail "gdb/68" "print g_D.A::x"
741 }
742 }
743
744 gdb_test "print g_D.B::b" "$vhn = 13"
745 gdb_test "print g_D.B::x" "$vhn = 14"
746 gdb_test "print g_D.C::c" "$vhn = 17"
747 gdb_test "print g_D.C::x" "$vhn = 18"
748 gdb_test "print g_D.D::d" "$vhn = 19"
749 gdb_test "print g_D.D::x" "$vhn = 20"
750
751 # Print all members of g_E.
752 # g_E.A::a and g_E.A::x are ambiguous.
753
754 set name "print g_E.A::a"
755 gdb_test_multiple "print g_E.A::a" $name {
756 -re "$vhn = (21|25)$nl$gdb_prompt $" {
757 kfail "gdb/68" "print g_E.A::a"
758 }
759 }
760
761 set name "print g_E.A::x"
762 gdb_test_multiple "print g_E.A::x" $name {
763 -re "$vhn = (26|22)$nl$gdb_prompt $" {
764 kfail "gdb/68" "print g_E.A::x"
765 }
766 }
767
768 gdb_test "print g_E.B::b" "$vhn = 23"
769 gdb_test "print g_E.B::x" "$vhn = 24"
770 gdb_test "print g_E.C::c" "$vhn = 27"
771 gdb_test "print g_E.C::x" "$vhn = 28"
772 gdb_test "print g_E.D::d" "$vhn = 29"
773 gdb_test "print g_E.D::x" "$vhn = 30"
774 gdb_test "print g_E.E::e" "$vhn = 31"
775 gdb_test "print g_E.E::x" "$vhn = 32"
776 }
777
778 # Multiple inheritance, print complete classes.
779
780 proc test_print_mi_classes { } {
781 global vhn
782
783 # Print all members of g_D.
784 gdb_test "print g_D" "$vhn = \{\<(class |)B\> = \{\<(class |)A\> = \{a = 11, x = 12\}, b = 13, x = 14\}, \<(class |)C\> = \{\<(class |)A\> = \{a = 15, x = 16\}, c = 17, x = 18\}, d = 19, x = 20\}"
785
786 # Print all members of g_E.
787 gdb_test "print g_E" "$vhn = \{\<(class |)D\> = \{\<(class |)B\> = \{\<(class |)A\> = \{a = 21, x = 22\}, b = 23, x = 24\}, \<(class |)C\> = \{\<(class |)A\> = \{a = 25, x = 26\}, c = 27, x = 28\}, d = 29, x = 30\}, e = 31, x = 32\}"
788 }
789
790 # Single inheritance, print anonymous unions.
791 # GDB versions prior to 4.14 entered an infinite loop when printing
792 # the type of a class containing an anonymous union, and they were also
793 # incapable of printing the member of an anonymous union.
794 # We test the printing of the member first, and perform the other tests
795 # only if the test succeeds, to avoid the infinite loop.
796 #
797 # GDB HEAD 2004-01-27 with hp aCC A.03.45 crashes on the first test.
798 # -- chastain 2004-01-27
799
800 proc test_print_anon_union {} {
801 global gdb_prompt
802 global ws
803 global nl
804 global vhn
805
806 gdb_test "print g_anon_union.a" "$vhn = 2" "print anonymous union member"
807
808 set name "print variable of type anonymous union"
809 gdb_test_multiple "print g_anon_union" $name {
810 -re "$vhn = \{one = 1, \{a = 2, b = 2\}\}$nl$gdb_prompt $" {
811 pass $name
812 }
813 }
814
815 set re_class "class class_with_anon_union \{${ws}public:"
816 set re_fields "int one;${ws}"
817 set re_anon_union "union \{${ws}int a;${ws}long int b;${ws}\};"
818 set re_synth_gcc_23 "class_with_anon_union & operator=\\(class_with_anon_union const ?&\\);${ws}class_with_anon_union\\(class_with_anon_union const ?&\\);${ws}class_with_anon_union\\((void|)\\);"
819
820 set name "print type of anonymous union"
821 gdb_test_multiple "ptype g_anon_union" $name {
822 -re "type = $re_class${ws}$re_fields${ws}$re_anon_union$nl\}$nl$gdb_prompt $" {
823 pass $name
824 }
825 -re "type = $re_class${ws}$re_fields${ws}$re_anon_union${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
826 pass $name
827 }
828 }
829 }
830
831
832 # Single virtual inheritance, print individual members.
833
834 proc test_print_svi_members { } {
835 global vhn
836
837 # Print all members of g_vA.
838 gdb_test "print g_vA.vA::va" "$vhn = 1"
839 gdb_test "print g_vA.vA::vx" "$vhn = 2"
840
841 # Print members of g_vA using compact form.
842 gdb_test "print g_vA.va" "$vhn = 1"
843 gdb_test "print g_vA.vx" "$vhn = 2"
844
845 # Print all members of g_vB.
846 gdb_test "print g_vB.vA::va" "$vhn = 3"
847 gdb_test "print g_vB.vA::vx" "$vhn = 4"
848 gdb_test "print g_vB.vB::vb" "$vhn = 5"
849 gdb_test "print g_vB.vB::vx" "$vhn = 6"
850
851 # Print members of g_vB using compact form.
852 gdb_test "print g_vB.va" "$vhn = 3"
853 gdb_test "print g_vB.vb" "$vhn = 5"
854 gdb_test "print g_vB.vx" "$vhn = 6"
855
856 # Print all members of g_vC.
857 gdb_test "print g_vC.vA::va" "$vhn = 7"
858 gdb_test "print g_vC.vA::vx" "$vhn = 8"
859 gdb_test "print g_vC.vC::vc" "$vhn = 9"
860 gdb_test "print g_vC.vC::vx" "$vhn = 10"
861
862 # Print members of g_vC using compact form.
863 gdb_test "print g_vC.va" "$vhn = 7" "print g_vC.va"
864 gdb_test "print g_vC.vc" "$vhn = 9" "print g_vC.vc"
865 gdb_test "print g_vC.vx" "$vhn = 10" "print g_vC.vx"
866 }
867
868 # Single virtual inheritance, print complete classes.
869
870 proc test_print_svi_classes { } {
871 global gdb_prompt
872 global hex
873 global nl
874 global vhn
875
876 # Print all members of g_vA.
877 gdb_test "print g_vA" "$vhn = \{va = 1, vx = 2\}"
878
879 # Print all members of g_vB.
880 set re_vbptr_2 "(_vb.2vA|_vb.vA)"
881 set re_vbptr_3 "_vptr.vB"
882
883 set name "print g_vB"
884 gdb_test_multiple "print g_vB" $name {
885 -re "$vhn = \{<vA> = \{va = 3, vx = 4\}, $re_vbptr_2 = $hex, vb = 5, vx = 6\}$nl$gdb_prompt $" {
886 # gcc 2.95.3 -gdwarf-2
887 # gcc 2.95.3 -gstabs+
888 pass $name
889 }
890 -re "$vhn = \{<vA> = \{va = 3, vx = 4\}, $re_vbptr_3 = $hex, vb = 5, vx = 6\}$nl$gdb_prompt $" {
891 # gcc 3.3.2 -gdwarf-2
892 # gcc HEAD 2004-01-21 -gdwarf-2
893 # gcc HEAD 2004-01-21 -gstabs+
894 pass "$name (FIXME v3 vtbl ptr)"
895 }
896 -re "$vhn = \{<vA> = \{va = 3, vx = 4\}, $re_vbptr_3 = $hex <VTT for vB>, vb = 5, vx = 6\}$nl$gdb_prompt $" {
897 # gcc 3.3.2 -gstabs+
898 pass $name
899 }
900 }
901
902 # Print all members of g_vC.
903 set re_vbptr_2 "(_vb.2vA|_vb.vA)"
904 set re_vbptr_3 "_vptr.vC"
905
906 set name "print g_vC"
907 gdb_test_multiple "print g_vC" $name {
908 -re "$vhn = \{<vA> = \{va = 7, vx = 8\}, $re_vbptr_2 = $hex, vc = 9, vx = 10\}$nl$gdb_prompt $" {
909 # gcc 2.95.3 -gdwarf-2
910 # gcc 2.95.3 -gstabs+
911 pass $name
912 }
913 -re "$vhn = \{<vA> = \{va = 7, vx = 8\}, $re_vbptr_3 = $hex, vc = 9, vx = 10\}$nl$gdb_prompt $" {
914 # gcc 3.3.2 -gdwarf-2
915 # gcc HEAD 2004-01-21 -gdwarf-2
916 # gcc HEAD 2004-01-21 -gstabs+
917 pass "$name (FIXME v3 vtbl ptr)"
918 }
919 -re "$vhn = \{<vA> = \{va = 7, vx = 8\}, $re_vbptr_3 = $hex <VTT for vC>, vc = 9, vx = 10\}$nl$gdb_prompt $" {
920 # gcc 3.3.2 -gstabs+
921 pass $name
922 }
923 }
924 }
925
926 # Multiple virtual inheritance, print individual members.
927
928 proc test_print_mvi_members { } {
929 global vhn
930
931 # Print all members of g_vD.
932 gdb_test "print g_vD.vA::va" "$vhn = 19"
933 gdb_test "print g_vD.vA::vx" "$vhn = 20"
934 gdb_test "print g_vD.vB::vb" "$vhn = 21"
935 gdb_test "print g_vD.vB::vx" "$vhn = 22"
936 gdb_test "print g_vD.vC::vc" "$vhn = 23"
937 gdb_test "print g_vD.vC::vx" "$vhn = 24"
938 gdb_test "print g_vD.vD::vd" "$vhn = 25"
939 gdb_test "print g_vD.vD::vx" "$vhn = 26"
940
941 # Print all members of g_vE.
942 gdb_test "print g_vE.vA::va" "$vhn = 0"
943 gdb_test "print g_vE.vA::vx" "$vhn = 0"
944 gdb_test "print g_vE.vB::vb" "$vhn = 0"
945 gdb_test "print g_vE.vB::vx" "$vhn = 0"
946 gdb_test "print g_vE.vC::vc" "$vhn = 0"
947 gdb_test "print g_vE.vC::vx" "$vhn = 0"
948 gdb_test "print g_vE.vD::vd" "$vhn = 0"
949 gdb_test "print g_vE.vD::vx" "$vhn = 0"
950 gdb_test "print g_vE.vE::ve" "$vhn = 27"
951 gdb_test "print g_vE.vE::vx" "$vhn = 28"
952 }
953
954 # Multiple virtual inheritance, print complete classes.
955
956 proc test_print_mvi_classes { } {
957 global gdb_prompt
958 global hex
959 global ws
960 global nl
961 global vhn
962
963 # Virtual base pointers for everybody.
964
965 set re_vbptr_2_vA "(_vb.2vA|_vb.vA)"
966 set re_vbptr_2_vB "(_vb.2vB|_vb.vB)"
967 set re_vbptr_2_vC "(_vb.2vC|_vb.vC)"
968 set re_vbptr_2_vD "(_vb.2vD|_vb.vD)"
969 set re_vbptr_3_vA "_vptr.vA"
970 set re_vbptr_3_vB "_vptr.vB"
971 set re_vbptr_3_vC "_vptr.vC"
972 set re_vbptr_3_vD "_vptr.vD"
973 set re_vbptr_3_vE "_vptr.vE"
974
975 # Print all members of g_vD.
976
977 set name "print g_vD"
978 gdb_test_multiple "print g_vD" $name {
979 -re "$vhn = \{<vB> = \{<vA> = \{va = 19, vx = 20\}, $re_vbptr_2_vA = $hex, vb = 21, vx = 22\}, <vC> = \{$re_vbptr_2_vA = $hex, vc = 23, vx = 24\}, $re_vbptr_2_vC = $hex, $re_vbptr_2_vB = $hex, vd = 25, vx = 26\}$nl$gdb_prompt $" {
980 # gcc 2.95.3 -gdwarf-2
981 # gcc 2.95.3 -gstabs+
982 pass $name
983 }
984 -re "$vhn = \{<vB> = \{<vA> = \{va = 19, vx = 20\}, $re_vbptr_3_vB = $hex, vb = 21, vx = 22\}, <vC> = \{$re_vbptr_3_vC = $hex, vc = 23, vx = 24\}, $re_vbptr_3_vD = $hex, vd = 25, vx = 26\}$nl$gdb_prompt $" {
985 # gcc 3.3.2 -gdwarf-2
986 # gcc HEAD 2004-01-21 -gdwarf-2
987 # gcc HEAD 2004-01-21 -gstabs+
988 pass "$name (FIXME v3 vtbl ptr)"
989 }
990 -re "$vhn = \{<vB> = \{<vA> = \{va = 19, vx = 20\}, $re_vbptr_3_vB = $hex, vb = 21, vx = 22\}, <vC> = \{$re_vbptr_3_vC = $hex <VTT for vD>, vc = 23, vx = 24\}, $re_vbptr_3_vD = $hex, vd = 25, vx = 26\}$nl$gdb_prompt $" {
991 # gcc 3.3.2 -gstabs+
992 pass "$name"
993 }
994 }
995
996 # Print all members of g_vE.
997
998 set name "print g_vE"
999 gdb_test_multiple "print g_vE" $name {
1000 -re "$vhn = \{<vD> = \{<vB> = \{<vA> = \{va = 0, vx = 0\}, $re_vbptr_2_vA = $hex, vb = 0, vx = 0\}, <vC> = \{$re_vbptr_2_vA = $hex, vc = 0, vx = 0\}, $re_vbptr_2_vC = $hex, $re_vbptr_2_vB = $hex, vd = 0, vx = 0\}, $re_vbptr_2_vD = $hex, ve = 27, vx = 28\}$nl$gdb_prompt $" {
1001 # gcc 2.95.3 -gdwarf-2
1002 # gcc 2.95.3 -gstabs+
1003 pass $name
1004 }
1005 -re "$vhn = \{<vD> = \{<vB> = \{<vA> = \{va = 0, vx = 0\}, $re_vbptr_3_vB = $hex, vb = 0, vx = 0\}, <vC> = \{$re_vbptr_3_vC = $hex, vc = 0, vx = 0\}, $re_vbptr_3_vD = $hex, vd = 0, vx = 0\}, $re_vbptr_3_vE = $hex, ve = 27, vx = 28\}$nl$gdb_prompt $" {
1006 # gcc 3.3.2 -gdwarf-2
1007 # gcc 3.3.2 -gstabs+
1008 # gcc HEAD 2004-01-21 -gdwarf-2
1009 # gcc HEAD 2004-01-21 -gstabs+
1010 pass "$name (FIXME v3 vtbl ptr)"
1011 }
1012 -re "$vhn = \{<vD> = \{<vB> = \{<vA> = \{va = 0, vx = 0\}, $re_vbptr_3_vB = $hex, vb = 0, vx = 0\}, <vC> = \{$re_vbptr_3_vC = $hex <VTT for vD>, vc = 0, vx = 0\}, $re_vbptr_3_vD = $hex, vd = 0, vx = 0\}, $re_vbptr_3_vE = $hex, ve = 27, vx = 28\}$nl$gdb_prompt $" {
1013 # gcc 3.2.7-rh -gstabs+
1014 pass "$name (FIXME v3 vtbl ptr)"
1015 }
1016 }
1017 }
1018
1019 proc do_tests { } {
1020 global prms_id
1021 global bug_id
1022 global subdir
1023 global objdir
1024 global srcdir
1025 global binfile
1026
1027 set prms_id 0
1028 set bug_id 0
1029
1030 # Start with a fresh gdb.
1031
1032 gdb_exit
1033 gdb_start
1034 gdb_reinitialize_dir $srcdir/$subdir
1035 gdb_load $binfile
1036
1037 gdb_test "set language c++" ""
1038 gdb_test "set width 0" ""
1039
1040 if { ![runto_main] } then {
1041 perror "couldn't run to main"
1042 return
1043 }
1044
1045 test_ptype_si
1046 test_ptype_mi
1047 test_ptype_vi
1048 test_ptype_mvi
1049
1050 if { ![runto 'inheritance2'] } then {
1051 perror "couldn't run to inheritance2"
1052 return
1053 }
1054
1055 test_print_si_members
1056 test_print_si_classes
1057 test_print_mi_members
1058 test_print_mi_classes
1059 test_print_anon_union
1060
1061 if { ![runto 'inheritance4'] } {
1062 perror "couldn't run to inheritance4"
1063 return
1064 }
1065
1066 test_print_svi_members
1067 test_print_svi_classes
1068 test_print_mvi_members
1069 test_print_mvi_classes
1070 }
1071
1072 do_tests