OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

[/] [openrisc/] [trunk/] [gnu-src/] [gdb-7.1/] [gdb/] [testsuite/] [gdb.cp/] [inherit.exp] - Blame information for rev 237

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 227 jeremybenn
# Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, 2003,
2
# 2004, 2006, 2007, 2008, 2009, 2010 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 3 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, see .
16
 
17
# This file was written by Fred Fish. (fnf@cygnus.com)
18
# And rewritten by Michael Chastain. (mec.gnu@mindspring.com)
19
 
20
set ws  "\[\r\n\t \]+"
21
set nl  "\[\r\n\]+"
22
set vhn "\\$\[0-9\]+"
23
 
24
if $tracelevel then {
25
    strace $tracelevel
26
}
27
 
28
if { [skip_cplus_tests] } { continue }
29
 
30
load_lib "cp-support.exp"
31
 
32
set testfile "inherit"
33
set srcfile misc.cc
34
set binfile ${objdir}/${subdir}/${testfile}
35
 
36
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
37
     untested inherit.exp
38
     return -1
39
}
40
 
41
# Single inheritance, print type definitions.
42
 
43
proc test_ptype_si { } {
44
    global gdb_prompt
45
    global ws
46
    global nl
47
 
48
    # A simple class.
49
 
50
    cp_test_ptype_class \
51
        "ptype A" "ptype A (FIXME)" "class" "A" \
52
        {
53
            { field public "int a;" }
54
            { field public "int x;" }
55
        }
56
    cp_test_ptype_class "ptype class A" "ptype class A (FIXME)" "class" "A" ibid
57
    cp_test_ptype_class "ptype g_A" "ptype g_A (FIXME)" "class" "A" ibid
58
 
59
    # A derived class.
60
 
61
    cp_test_ptype_class \
62
        "ptype B" "" "class" "B" \
63
        {
64
            { base         "public A" }
65
            { field public "int b;" }
66
            { field public "int x;" }
67
        }
68
    cp_test_ptype_class "ptype class B" "" "class" "B" ibid
69
    cp_test_ptype_class "ptype g_B" "" "class" "B" ibid
70
 
71
    # Another derived class.
72
 
73
    cp_test_ptype_class \
74
        "ptype C" "" "class" "C" \
75
        {
76
            { base         "public A" }
77
            { field public "int c;" }
78
            { field public "int x;" }
79
        }
80
    cp_test_ptype_class "ptype class C" "" "class" "C" ibid
81
    cp_test_ptype_class "ptype g_C" "" "class" "C" ibid
82
 
83
    # A structure with no tag.
84
    # TODO: move this mess into a separate file, and re-specify
85
    # which results are PASS, KFAIL, XFAIL, and FAIL.
86
 
87
    set re_tag          "tagless_struct"
88
    set XX_tag          "\\._1"
89
    set re_class        "(class $re_tag \{${ws}public:|class \{${ws}public:|struct $re_tag \{|struct \{)"
90
    set XX_class        "(class $XX_tag \{${ws}public:|struct $XX_tag \{)"
91
    set re_fields       "int one;${ws}int two;"
92
    set re_synth_gcc_23 "$re_tag & operator=\\($re_tag const ?&\\);${ws}$re_tag\\($re_tag const ?&\\);${ws}$re_tag\\((void|)\\);"
93
    set XX_synth_gcc_23 "($re_tag|$XX_tag) & operator=\\($XX_tag const ?&\\);${ws}$XX_tag\\($XX_tag const ?&\\);${ws}$XX_tag\\((void|)\\);"
94
 
95
    set name "ptype tagless struct"
96
    gdb_test_multiple "ptype tagless_struct" $name {
97
        -re "type = $XX_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
98
            # gcc 2.95.3 -gdwarf-2
99
            pass "$name"
100
        }
101
        -re "type = $re_class${ws}$re_fields${ws}$XX_synth_gcc_23$nl\}$nl$gdb_prompt $" {
102
            # gcc 2.95.3 -gstabs+
103
            pass "$name"
104
        }
105
        -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
106
            # gcc 3.3.4 -gdwarf-2
107
            # gcc 3.4.1 -gdwarf-2
108
            # gcc HEAD 2004-07-31 -gdwarf-2
109
            # gcc HEAD 2004-07-31 -gstabs+
110
            pass "$name"
111
        }
112
        -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
113
            # gcc 3.3.4 -gstabs+
114
            # gcc 3.4.1 -gstabs+
115
            pass "$name"
116
        }
117
    }
118
 
119
    set name "ptype variable of type tagless struct"
120
    gdb_test_multiple "ptype v_tagless" $name {
121
        -re "type = $XX_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
122
            # gcc 2.95.3 -gdwarf-2
123
            pass "$name"
124
        }
125
        -re "type = $re_class${ws}$re_fields${ws}$XX_synth_gcc_23$nl\}$nl$gdb_prompt $" {
126
            # gcc 2.95.3 -gstabs+
127
            pass "$name"
128
        }
129
        -re "type = $re_class${ws}$re_fields$nl\}$nl$gdb_prompt $" {
130
            # gcc 3.3.4 -gdwarf-2
131
            # gcc 3.4.1 -gdwarf-2
132
            # gcc HEAD 2004-07-31 -gdwarf-2
133
            # gcc HEAD 2004-07-31 -gstabs+
134
            pass "$name"
135
        }
136
        -re "type = $re_class${ws}$re_fields${ws}$re_synth_gcc_23$nl\}$nl$gdb_prompt $" {
137
            # gcc 3.3.4 -gstabs+
138
            # gcc 3.4.1 -gstabs+
139
            pass "$name"
140
        }
141
    }
142
}
143
 
144
# Multiple inheritance, print type definitions.
145
 
146
proc test_ptype_mi { } {
147
 
148
    # A class with two bases.
149
 
150
    cp_test_ptype_class \
151
        "ptype D" "" "class" "D" \
152
        {
153
            { base         "public B" }
154
            { base         "public C" }
155
            { field public "int d;" }
156
            { field public "int x;" }
157
        }
158
    cp_test_ptype_class "ptype class D" "" "class" "D" ibid
159
    cp_test_ptype_class "ptype g_D" "" "class" "D" ibid
160
 
161
    # A class derived from the previous class.
162
 
163
    cp_test_ptype_class \
164
        "ptype E" "" "class" "E" \
165
        {
166
            { base         "public D" }
167
            { field public "int e;" }
168
            { field public "int x;" }
169
        }
170
    cp_test_ptype_class "ptype class E" "" "class" "E" ibid
171
    cp_test_ptype_class "ptype g_E" "" "class" "E" ibid
172
}
173
 
174
# Single virtual inheritance, print type definitions.
175
 
176
proc test_ptype_vi { } {
177
 
178
    # class vA
179
 
180
    cp_test_ptype_class \
181
        "ptype vA" "" "class" "vA" \
182
        {
183
            { field public "int va;" }
184
            { field public "int vx;" }
185
        }
186
    cp_test_ptype_class "ptype class vA" "" "class" "vA" ibid
187
    cp_test_ptype_class "ptype g_vA" "" "class" "vA" ibid
188
 
189
    # class vB
190
 
191
    cp_test_ptype_class \
192
        "ptype vB" "" "class" "vB" \
193
        {
194
            { base         "public virtual vA" }
195
            { vbase        "vA" }
196
            { field public "int vb;" }
197
            { field public "int vx;" }
198
        }
199
    cp_test_ptype_class "ptype class vB" "" "class" "vB" ibid
200
    cp_test_ptype_class "ptype g_vB" "" "class" "vB" ibid
201
 
202
    # class vC
203
 
204
    cp_test_ptype_class \
205
        "ptype vC" "" "class" "vC" \
206
        {
207
            { base         "public virtual vA" }
208
            { vbase        "vA" }
209
            { field public "int vc;" }
210
            { field public "int vx;" }
211
        }
212
    cp_test_ptype_class "ptype class vC" "" "class" "vC" ibid
213
    cp_test_ptype_class "ptype g_vC" "" "class" "vC" ibid
214
 
215
}
216
 
217
# Multiple virtual inheritance, print type definitions.
218
 
219
proc test_ptype_mvi { } {
220
 
221
    # class vD
222
 
223
    cp_test_ptype_class \
224
        "ptype vD" "" "class" "vD" \
225
        {
226
            { base         "public virtual vB" }
227
            { base         "public virtual vC" }
228
            { vbase        "vC" }
229
            { vbase        "vB" }
230
            { field public "int vd;" }
231
            { field public "int vx;" }
232
        }
233
    cp_test_ptype_class "ptype class vD" "" "class" "vD" ibid
234
    cp_test_ptype_class "ptype g_vD" "" "class" "vD" ibid
235
 
236
    # class vE
237
 
238
    cp_test_ptype_class \
239
        "ptype vE" "" "class" "vE" \
240
        {
241
            { base         "public virtual vD" }
242
            { vbase        "vD" }
243
            { field public "int ve;" }
244
            { field public "int vx;" }
245
        }
246
    cp_test_ptype_class "ptype class vE" "" "class" "vE" ibid
247
    cp_test_ptype_class "ptype g_vE" "" "class" "vE" ibid
248
 
249
}
250
 
251
# Single inheritance, print individual members.
252
 
253
proc test_print_si_members { } {
254
    global vhn
255
 
256
    # Print all members of g_A using fully qualified form.
257
    gdb_test "print g_A.A::a" "$vhn = 1"
258
    gdb_test "print g_A.A::x" "$vhn = 2"
259
 
260
    # Print members of g_A using nonambiguous compact form.
261
    gdb_test "print g_A.a" "$vhn = 1"
262
    gdb_test "print g_A.x" "$vhn = 2"
263
 
264
    # Print all members of g_B using fully qualified form.
265
    gdb_test "print g_B.A::a" "$vhn = 3"
266
    gdb_test "print g_B.A::x" "$vhn = 4"
267
    gdb_test "print g_B.B::b" "$vhn = 5"
268
    gdb_test "print g_B.B::x" "$vhn = 6"
269
 
270
    # Print members of g_B using nonambiguous compact form.
271
    gdb_test "print g_B.a" "$vhn = 3"
272
    gdb_test "print g_B.b" "$vhn = 5"
273
    gdb_test "print g_B.x" "$vhn = 6"
274
 
275
    # Print all members of g_C using fully qualified form.
276
    gdb_test "print g_C.A::a" "$vhn = 7"
277
    gdb_test "print g_C.A::x" "$vhn = 8"
278
    gdb_test "print g_C.C::c" "$vhn = 9"
279
    gdb_test "print g_C.C::x" "$vhn = 10"
280
 
281
    # Print members of g_C using nonambiguous compact form.
282
    gdb_test "print g_C.a" "$vhn = 7"
283
    gdb_test "print g_C.c" "$vhn = 9"
284
    gdb_test "print g_C.x" "$vhn = 10"
285
}
286
 
287
# Single inheritance, print complete classes.
288
 
289
proc test_print_si_classes { } {
290
    global vhn
291
 
292
    # Print all members of g_A, g_B, g_C.
293
    gdb_test "print g_A" "$vhn = \{a = 1, x = 2\}"
294
    gdb_test "print g_B" "$vhn = \{<(class A|A)> = \{a = 3, x = 4\}, b = 5, x = 6\}"
295
    gdb_test "print g_C" "$vhn = \{<(class A|A)> = \{a = 7, x = 8\}, c = 9, x = 10\}"
296
}
297
 
298
# Multiple inheritance, print individual members.
299
 
300
proc test_print_mi_members {} {
301
    global gdb_prompt
302
    global nl
303
    global vhn
304
 
305
    # Print all members of g_A.
306
    gdb_test "print g_A.A::a" "$vhn = 1"
307
    gdb_test "print g_A.A::x" "$vhn = 2"
308
 
309
    # Print all members of g_B.
310
    gdb_test "print g_B.A::a" "$vhn = 3"
311
    gdb_test "print g_B.A::x" "$vhn = 4"
312
    gdb_test "print g_B.B::b" "$vhn = 5"
313
    gdb_test "print g_B.B::x" "$vhn = 6"
314
 
315
    # Print all members of g_C.
316
    gdb_test "print g_C.A::a" "$vhn = 7"
317
    gdb_test "print g_C.A::x" "$vhn = 8"
318
    gdb_test "print g_C.C::c" "$vhn = 9"
319
    gdb_test "print g_C.C::x" "$vhn = 10"
320
 
321
    # Print all members of g_D.
322
    #
323
    # g_D.A::a and g_D.A::x are ambiguous member accesses, and gdb
324
    # should detect these.  There are no ways to PASS these tests
325
    # because I don't know what the gdb message will be.  -- chastain
326
    # 2004-01-27.
327
 
328
    set name "print g_D.A::a"
329
    gdb_test_multiple "print g_D.A::a" $name {
330
        -re "$vhn = (15|11)$nl$gdb_prompt $" {
331
            kfail "gdb/68" "print g_D.A::a"
332
        }
333
    }
334
 
335
    set name "print g_D.A::x"
336
    gdb_test_multiple "print g_D.A::x" $name {
337
        -re "$vhn = (16|12)$nl$gdb_prompt $" {
338
            kfail "gdb/68" "print g_D.A::x"
339
        }
340
    }
341
 
342
    gdb_test "print g_D.B::b" "$vhn = 13"
343
    gdb_test "print g_D.B::x" "$vhn = 14"
344
    gdb_test "print g_D.C::c" "$vhn = 17"
345
    gdb_test "print g_D.C::x" "$vhn = 18"
346
    gdb_test "print g_D.D::d" "$vhn = 19"
347
    gdb_test "print g_D.D::x" "$vhn = 20"
348
 
349
    # Print all members of g_E.
350
    # g_E.A::a and g_E.A::x are ambiguous.
351
 
352
    set name "print g_E.A::a"
353
    gdb_test_multiple "print g_E.A::a" $name {
354
        -re "$vhn = (21|25)$nl$gdb_prompt $" {
355
            kfail "gdb/68" "print g_E.A::a"
356
        }
357
    }
358
 
359
    set name "print g_E.A::x"
360
    gdb_test_multiple "print g_E.A::x" $name {
361
        -re "$vhn = (26|22)$nl$gdb_prompt $" {
362
            kfail "gdb/68" "print g_E.A::x"
363
        }
364
    }
365
 
366
    gdb_test "print g_E.B::b" "$vhn = 23"
367
    gdb_test "print g_E.B::x" "$vhn = 24"
368
    gdb_test "print g_E.C::c" "$vhn = 27"
369
    gdb_test "print g_E.C::x" "$vhn = 28"
370
    gdb_test "print g_E.D::d" "$vhn = 29"
371
    gdb_test "print g_E.D::x" "$vhn = 30"
372
    gdb_test "print g_E.E::e" "$vhn = 31"
373
    gdb_test "print g_E.E::x" "$vhn = 32"
374
}
375
 
376
# Multiple inheritance, print individual member types.
377
 
378
proc test_print_mi_member_types {} {
379
    global gdb_prompt
380
    global nl
381
    global vhn
382
 
383
    # Print the types of some members of g_D without qualifying them.
384
    gdb_test "ptype g_D.b" "type = int"
385
    gdb_test "ptype g_D.c" "type = int"
386
    gdb_test "ptype g_D.d" "type = int"
387
 
388
    # Print the types of qualified members; none of these tests pass today.
389
 
390
    # Print all members of g_A.
391
    gdb_test "ptype g_A.A::a" "type = int"
392
    gdb_test "ptype g_A.A::x" "type = int"
393
 
394
    # Print all members of g_B.
395
    gdb_test "ptype g_B.A::a" "type = int"
396
    gdb_test "ptype g_B.A::x" "type = int"
397
    gdb_test "ptype g_B.B::b" "type = int"
398
    gdb_test "ptype g_B.B::x" "type = int"
399
 
400
    # Print all members of g_C.
401
    gdb_test "ptype g_C.A::a" "type = int"
402
    gdb_test "ptype g_C.A::x" "type = int"
403
    gdb_test "ptype g_C.C::c" "type = int"
404
    gdb_test "ptype g_C.C::x" "type = int"
405
 
406
    # Print all members of g_D.
407
    #
408
    # g_D.A::a and g_D.A::x are ambiguous member accesses, and gdb
409
    # should detect these.  There are no ways to PASS these tests
410
    # because I don't know what the gdb message will be.  -- chastain
411
    # 2004-01-27.
412
 
413
    set name "ptype g_D.A::a"
414
    gdb_test_multiple "ptype g_D.A::a" $name {
415
        -re "type = int$nl$gdb_prompt $" {
416
            kfail "gdb/68" "ptype g_D.A::a"
417
        }
418
    }
419
 
420
    set name "ptype g_D.A::x"
421
    gdb_test_multiple "ptype g_D.A::x" $name {
422
        -re "type = int$nl$gdb_prompt $" {
423
            kfail "gdb/68" "ptype g_D.A::x"
424
        }
425
    }
426
 
427
    gdb_test "ptype g_D.B::b" "type = int"
428
    gdb_test "ptype g_D.B::x" "type = int"
429
    gdb_test "ptype g_D.C::c" "type = int"
430
    gdb_test "ptype g_D.C::x" "type = int"
431
    gdb_test "ptype g_D.D::d" "type = int"
432
    gdb_test "ptype g_D.D::x" "type = int"
433
 
434
    # Print all members of g_E.
435
    # g_E.A::a and g_E.A::x are ambiguous.
436
 
437
    set name "ptype g_E.A::a"
438
    gdb_test_multiple "ptype g_E.A::a" $name {
439
        -re "type = int$nl$gdb_prompt $" {
440
            kfail "gdb/68" "ptype g_E.A::a"
441
        }
442
    }
443
 
444
    set name "ptype g_E.A::x"
445
    gdb_test_multiple "ptype g_E.A::x" $name {
446
        -re "type = int$nl$gdb_prompt $" {
447
            kfail "gdb/68" "ptype g_E.A::x"
448
        }
449
    }
450
 
451
    gdb_test "ptype g_E.B::b" "type = int"
452
    gdb_test "ptype g_E.B::x" "type = int"
453
    gdb_test "ptype g_E.C::c" "type = int"
454
    gdb_test "ptype g_E.C::x" "type = int"
455
    gdb_test "ptype g_E.D::d" "type = int"
456
    gdb_test "ptype g_E.D::x" "type = int"
457
    gdb_test "ptype g_E.E::e" "type = int"
458
    gdb_test "ptype g_E.E::x" "type = int"
459
}
460
 
461
# Multiple inheritance, print complete classes.
462
 
463
proc test_print_mi_classes { } {
464
    global vhn
465
 
466
    # Print all members of g_D.
467
    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\}"
468
 
469
    # Print all members of g_E.
470
    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\}"
471
}
472
 
473
# Single inheritance, print anonymous unions.
474
# GDB versions prior to 4.14 entered an infinite loop when printing
475
# the type of a class containing an anonymous union, and they were also
476
# incapable of printing the member of an anonymous union.
477
# We test the printing of the member first, and perform the other tests
478
# only if the test succeeds, to avoid the infinite loop.
479
#
480
# GDB HEAD 2004-01-27 with hp aCC A.03.45 crashes on the first test.
481
# -- chastain 2004-01-27
482
 
483
proc test_print_anon_union {} {
484
    global gdb_prompt
485
    global ws
486
    global nl
487
    global vhn
488
 
489
    gdb_test "print g_anon_union.a" "$vhn = 2" "print anonymous union member"
490
 
491
    set name "print variable of type anonymous union"
492
    gdb_test_multiple "print g_anon_union" $name {
493
        -re "$vhn = \{one = 1, \{a = 2, b = 2\}\}$nl$gdb_prompt $" {
494
            pass $name
495
        }
496
    }
497
 
498
    # The nested union prints as a multi-line field, but the class body
499
    # scanner is inherently line-oriented.  This is ugly but it works.
500
 
501
    cp_test_ptype_class \
502
        "ptype g_anon_union" "print type of anonymous union" \
503
        "class" "class_with_anon_union" \
504
        {
505
            { field public "int one;" }
506
            { field public "union \{" }
507
            { field public "int a;" }
508
            { field public "long int b;" }
509
            { field public "\};" }
510
        }
511
 
512
}
513
 
514
 
515
# Single virtual inheritance, print individual members.
516
 
517
proc test_print_svi_members { } {
518
    global vhn
519
 
520
    # Print all members of g_vA.
521
    gdb_test "print g_vA.vA::va" "$vhn = 1"
522
    gdb_test "print g_vA.vA::vx" "$vhn = 2"
523
 
524
    # Print members of g_vA using compact form.
525
    gdb_test "print g_vA.va" "$vhn = 1"
526
    gdb_test "print g_vA.vx" "$vhn = 2"
527
 
528
    # Print all members of g_vB.
529
    gdb_test "print g_vB.vA::va" "$vhn = 3"
530
    gdb_test "print g_vB.vA::vx" "$vhn = 4"
531
    gdb_test "print g_vB.vB::vb" "$vhn = 5"
532
    gdb_test "print g_vB.vB::vx" "$vhn = 6"
533
 
534
    # Print members of g_vB using compact form.
535
    gdb_test "print g_vB.va" "$vhn = 3"
536
    gdb_test "print g_vB.vb" "$vhn = 5"
537
    gdb_test "print g_vB.vx" "$vhn = 6"
538
 
539
    # Print all members of g_vC.
540
    gdb_test "print g_vC.vA::va" "$vhn = 7"
541
    gdb_test "print g_vC.vA::vx" "$vhn = 8"
542
    gdb_test "print g_vC.vC::vc" "$vhn = 9"
543
    gdb_test "print g_vC.vC::vx" "$vhn = 10"
544
 
545
    # Print members of g_vC using compact form.
546
    gdb_test "print g_vC.va" "$vhn = 7" "print g_vC.va"
547
    gdb_test "print g_vC.vc" "$vhn = 9" "print g_vC.vc"
548
    gdb_test "print g_vC.vx" "$vhn = 10" "print g_vC.vx"
549
}
550
 
551
# Single virtual inheritance, print complete classes.
552
 
553
proc test_print_svi_classes { } {
554
    global gdb_prompt
555
    global hex
556
    global nl
557
    global vhn
558
 
559
    # Print all members of g_vA.
560
    gdb_test "print g_vA" "$vhn = \{va = 1, vx = 2\}"
561
 
562
    # Print all members of g_vB.
563
    set re_vbptr_2      "(_vb.2vA|_vb.vA)"
564
    set re_vbptr_3      "_vptr.vB"
565
 
566
    set name "print g_vB"
567
    gdb_test_multiple "print g_vB" $name {
568
        -re "$vhn = \{ = \{va = 3, vx = 4\}, $re_vbptr_2 = $hex, vb = 5, vx = 6\}$nl$gdb_prompt $" {
569
            # gcc 2.95.3 -gdwarf-2
570
            # gcc 2.95.3 -gstabs+
571
            pass $name
572
        }
573
        -re "$vhn = \{ = \{va = 3, vx = 4\}, $re_vbptr_3 = $hex, vb = 5, vx = 6\}$nl$gdb_prompt $" {
574
            # gcc 3.3.4 -gdwarf-2
575
            # gcc 3.4.1 -gdwarf-2
576
            # gcc 3.4.1 -gstabs+
577
            # gcc HEAD 2004-07-31 -gdwarf-2
578
            pass "$name (FIXME v3 vtbl ptr)"
579
        }
580
        -re "$vhn = \{ = \{va = 3, vx = 4\}, $re_vbptr_3 = $hex , vb = 5, vx = 6\}$nl$gdb_prompt $" {
581
            # gcc 3.3.4 -gstabs+
582
            pass $name
583
        }
584
        -re "$vhn = \{ = \{va = 3, vx = 4\}, $re_vbptr_3 = $hex , vb = 5, vx = 6\}$nl$gdb_prompt $" {
585
            # gcc HEAD 2004-07-31 -gstabs+
586
            pass $name
587
        }
588
    }
589
 
590
    # Print all members of g_vC.
591
    set re_vbptr_2      "(_vb.2vA|_vb.vA)"
592
    set re_vbptr_3      "_vptr.vC"
593
 
594
    set name "print g_vC"
595
    gdb_test_multiple "print g_vC" $name {
596
        -re "$vhn = \{ = \{va = 7, vx = 8\}, $re_vbptr_2 = $hex, vc = 9, vx = 10\}$nl$gdb_prompt $" {
597
            # gcc 2.95.3 -gdwarf-2
598
            # gcc 2.95.3 -gstabs+
599
            pass $name
600
        }
601
        -re "$vhn = \{ = \{va = 7, vx = 8\}, $re_vbptr_3 = $hex, vc = 9, vx = 10\}$nl$gdb_prompt $" {
602
            # gcc 3.3.4 -gdwarf-2
603
            # gcc 3.4.1 -gdwarf-2
604
            # gcc 3.4.1 -gstabs+
605
            # gcc HEAD 2004-07-31 -gdwarf-2
606
            pass "$name (FIXME v3 vtbl ptr)"
607
        }
608
        -re "$vhn = \{ = \{va = 7, vx = 8\}, $re_vbptr_3 = $hex , vc = 9, vx = 10\}$nl$gdb_prompt $" {
609
            # gcc 3.3.4 -gstabs+
610
            pass $name
611
        }
612
        -re "$vhn = \{ = \{va = 7, vx = 8\}, $re_vbptr_3 = $hex , vc = 9, vx = 10\}$nl$gdb_prompt $" {
613
            # gcc HEAD 2004-07-31 -gstabs+
614
            pass $name
615
        }
616
    }
617
}
618
 
619
# Multiple virtual inheritance, print individual members.
620
 
621
proc test_print_mvi_members { } {
622
    global vhn
623
 
624
    # Print all members of g_vD.
625
    gdb_test "print g_vD.vA::va" "$vhn = 19"
626
    gdb_test "print g_vD.vA::vx" "$vhn = 20"
627
    gdb_test "print g_vD.vB::vb" "$vhn = 21"
628
    gdb_test "print g_vD.vB::vx" "$vhn = 22"
629
    gdb_test "print g_vD.vC::vc" "$vhn = 23"
630
    gdb_test "print g_vD.vC::vx" "$vhn = 24"
631
    gdb_test "print g_vD.vD::vd" "$vhn = 25"
632
    gdb_test "print g_vD.vD::vx" "$vhn = 26"
633
 
634
    # Print all members of g_vE.
635
    gdb_test "print g_vE.vA::va" "$vhn = 0"
636
    gdb_test "print g_vE.vA::vx" "$vhn = 0"
637
    gdb_test "print g_vE.vB::vb" "$vhn = 0"
638
    gdb_test "print g_vE.vB::vx" "$vhn = 0"
639
    gdb_test "print g_vE.vC::vc" "$vhn = 0"
640
    gdb_test "print g_vE.vC::vx" "$vhn = 0"
641
    gdb_test "print g_vE.vD::vd" "$vhn = 0"
642
    gdb_test "print g_vE.vD::vx" "$vhn = 0"
643
    gdb_test "print g_vE.vE::ve" "$vhn = 27"
644
    gdb_test "print g_vE.vE::vx" "$vhn = 28"
645
}
646
 
647
# Multiple virtual inheritance, print complete classes.
648
 
649
proc test_print_mvi_classes { } {
650
    global gdb_prompt
651
    global hex
652
    global ws
653
    global nl
654
    global vhn
655
 
656
    # Virtual base pointers for everybody.
657
 
658
    set re_vbptr_2_vA   "(_vb.2vA|_vb.vA)"
659
    set re_vbptr_2_vB   "(_vb.2vB|_vb.vB)"
660
    set re_vbptr_2_vC   "(_vb.2vC|_vb.vC)"
661
    set re_vbptr_2_vD   "(_vb.2vD|_vb.vD)"
662
    set re_vbptr_3_vA   "_vptr.vA"
663
    set re_vbptr_3_vB   "_vptr.vB"
664
    set re_vbptr_3_vC   "_vptr.vC"
665
    set re_vbptr_3_vD   "_vptr.vD"
666
    set re_vbptr_3_vE   "_vptr.vE"
667
 
668
    # Print all members of g_vD.
669
 
670
    set name "print g_vD"
671
    gdb_test_multiple "print g_vD" $name {
672
        -re "$vhn = \{ = \{ = \{va = 19, vx = 20\}, $re_vbptr_2_vA = $hex, vb = 21, vx = 22\},  = \{$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 $" {
673
            # gcc 2.95.3 -gdwarf-2
674
            # gcc 2.95.3 -gstabs+
675
            pass $name
676
        }
677
        -re "$vhn = \{ = \{ = \{va = 19, vx = 20\}, $re_vbptr_3_vB = $hex, vb = 21, vx = 22\},  = \{$re_vbptr_3_vC = $hex, vc = 23, vx = 24\}, $re_vbptr_3_vD = $hex, vd = 25, vx = 26\}$nl$gdb_prompt $" {
678
            # gcc 3.3.2 -gdwarf-2
679
            # gcc HEAD 2004-01-21 -gdwarf-2
680
            # gcc HEAD 2004-01-21 -gstabs+
681
            pass "$name (FIXME v3 vtbl ptr)"
682
        }
683
        -re "$vhn = \{ = \{ = \{va = 19, vx = 20\}, $re_vbptr_3_vB = $hex, vb = 21, vx = 22\},  = \{$re_vbptr_3_vC = $hex , vc = 23, vx = 24\}, $re_vbptr_3_vD = $hex, vd = 25, vx = 26\}$nl$gdb_prompt $" {
684
            # gcc 3.3.2 -gstabs+
685
            pass "$name"
686
        }
687
    }
688
 
689
    # Print all members of g_vE.
690
 
691
    set name "print g_vE"
692
    gdb_test_multiple "print g_vE" $name {
693
        -re "$vhn = \{ = \{ = \{ = \{va = 0, vx = 0\}, $re_vbptr_2_vA = $hex, vb = 0, vx = 0\},  = \{$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 $" {
694
            # gcc 2.95.3 -gdwarf-2
695
            # gcc 2.95.3 -gstabs+
696
            pass $name
697
        }
698
        -re "$vhn = \{ = \{ = \{ = \{va = 0, vx = 0\}, $re_vbptr_3_vB = $hex, vb = 0, vx = 0\},  = \{$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 $" {
699
            # gcc 3.3.4 -gdwarf-2
700
            # gcc 3.3.4 -gstabs+
701
            # gcc 3.4.1 -gdwarf-2
702
            # gcc 3.4.1 -gstabs+
703
            # gcc HEAD 2004-07-31 -gdwarf-2
704
            pass "$name (FIXME v3 vtbl ptr)"
705
        }
706
        -re "$vhn = \{ = \{ = \{ = \{va = 0, vx = 0\}, $re_vbptr_3_vB = $hex, vb = 0, vx = 0\},  = \{$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 $" {
707
            # gcc 3.2.7-rh -gstabs+
708
            pass $name
709
        }
710
        -re "$vhn = \{ = \{ = \{ = \{va = 0, vx = 0\}, $re_vbptr_3_vB = $hex, vb = 0, vx = 0\},  = \{$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 $" {
711
            # gcc HEAD 2004-07-31 -gstabs+
712
            pass $name
713
        }
714
    }
715
}
716
 
717
proc do_tests { } {
718
    global prms_id
719
    global bug_id
720
    global subdir
721
    global objdir
722
    global srcdir
723
    global binfile
724
 
725
    set prms_id 0
726
    set bug_id 0
727
 
728
    # Start with a fresh gdb.
729
 
730
    gdb_exit
731
    gdb_start
732
    gdb_reinitialize_dir $srcdir/$subdir
733
    gdb_load $binfile
734
 
735
    gdb_test "set language c++" ""
736
    gdb_test "set width 0" ""
737
 
738
    if { ![runto_main] } then {
739
        perror "couldn't run to main"
740
        return
741
    }
742
 
743
    test_ptype_si
744
    test_ptype_mi
745
    test_ptype_vi
746
    test_ptype_mvi
747
 
748
    if { ![runto 'inheritance2'] } then {
749
        perror "couldn't run to inheritance2"
750
        return
751
    }
752
 
753
    test_print_si_members
754
    test_print_si_classes
755
    test_print_mi_members
756
    test_print_mi_member_types
757
    test_print_mi_classes
758
    test_print_anon_union
759
 
760
    if { ![runto 'inheritance4'] } {
761
        perror "couldn't run to inheritance4"
762
        return
763
    }
764
 
765
    test_print_svi_members
766
    test_print_svi_classes
767
    test_print_mvi_members
768
    test_print_mvi_classes
769
}
770
 
771
do_tests

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.