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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [testsuite/] [gdb.c++/] [member-ptr.exp] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 106 markom
# Copyright (C) 1998, 1999 Free Software Foundation, Inc.
2
 
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
16
 
17
# Please email any bugs, comments, and/or additions to this file to:
18
# bug-gdb@prep.ai.mit.edu
19
# Tests for pointer-to-member support
20
# Written by Satish Pai  1997-08-19
21
 
22
# This file is part of the gdb testsuite
23
 
24
 
25
if $tracelevel then {
26
        strace $tracelevel
27
        }
28
 
29
if { [skip_cplus_tests] } { continue }
30
 
31
#
32
# test running programs
33
#
34
 
35
# Start with a fresh gdb
36
gdb_exit
37
gdb_start
38
gdb_reinitialize_dir $srcdir/$subdir
39
 
40
set prms_id 0
41
set bug_id 0
42
 
43
set testfile "member-ptr"
44
set srcfile ${testfile}.cc
45
set binfile ${objdir}/${subdir}/${testfile}
46
 
47
# Create and source the file that provides information about the compiler
48
# used to compile the test case.
49
 
50
if [get_compiler_info ${binfile} "c++"] {
51
    return -1
52
}
53
 
54
# Nearly all of these tests fail when compiled with G++, so just give up
55
# until GDB gets enhanced. -sts 1999-06-22
56
 
57
if {$gcc_compiled} {
58
    continue
59
}
60
 
61
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
62
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
63
}
64
 
65
 
66
gdb_exit
67
gdb_start
68
gdb_reinitialize_dir $srcdir/$subdir
69
gdb_load ${binfile}
70
 
71
 
72
if ![runto_main] then {
73
    perror "couldn't run to breakpoint"
74
    continue
75
}
76
 
77
send_gdb "break 83\n"
78
gdb_expect {
79
   -re "Breakpoint \[0-9\]*.*line 83\\.\r\n$gdb_prompt $" {
80
      pass "set break at 83"
81
    }
82
    -re ".*$gdb_prompt $" { fail "set break at 83" }
83
    timeout { fail "(timeout) set break at 83" }
84
}
85
 
86
send_gdb "continue\n"
87
gdb_expect {
88
   -re "Continuing\\.\r\n\r\nBreakpoint.*at.*member-ptr\\.cc:83\r\n83\[ \t]*pmi = NULL;\r\n$gdb_prompt $" {
89
      pass "continue to 83"
90
    }
91
    -re ".*$gdb_prompt $" { fail "continue to 83" }
92
    timeout { fail "(timeout) continue to 83" }
93
}
94
 
95
# ptype on pointer to data member
96
 
97
send_gdb "ptype pmi\n"
98
gdb_expect {
99
   -re "type = int \\( A::\\*\\)\r\n$gdb_prompt $" {
100
      pass "ptype pmi"
101
    }
102
    -re ".*$gdb_prompt $" { fail "ptype pmi" }
103
    timeout { fail "(timeout) ptype pmi" }
104
}
105
 
106
# print pointer to data member
107
 
108
setup_xfail "hppa*-*-*" CLLbs16901
109
send_gdb "print pmi\n"
110
gdb_expect {
111
   -re "\\$\[0-9\]* = \\(int \\( A::\\*\\)\\) &A::j\r\n$gdb_prompt $" {
112
      pass "print pmi"
113
    }
114
    -re ".*$gdb_prompt $" { fail "print pmi" }
115
    timeout { fail "(timeout) print pmi" }
116
}
117
 
118
 
119
# print dereferenced pointer to data member
120
 
121
setup_xfail "hppa*-*-*" CLLbs16901
122
send_gdb "print a.*pmi\n"
123
gdb_expect {
124
   -re "\\$\[0-9\]* = 121\r\n$gdb_prompt $" {
125
      pass "print a.*pmi"
126
    }
127
    -re ".*$gdb_prompt $" { fail "print a.*pmi" }
128
    timeout { fail "(timeout) print a.*pmi" }
129
}
130
 
131
# print dereferenced pointer to data member
132
# this time, dereferenced through a pointer
133
 
134
setup_xfail "hppa*-*-*" CLLbs16901
135
send_gdb "print a_p->*pmi\n"
136
gdb_expect {
137
   -re "\\$\[0-9\]* = 121\r\n$gdb_prompt $" {
138
      pass "print a->*pmi"
139
    }
140
    -re ".*$gdb_prompt $" { fail "print a->*pmi" }
141
    timeout { fail "(timeout) print a->*pmi" }
142
}
143
 
144
 
145
# set the pointer to data member
146
 
147
send_gdb "set var pmi = &A::jj\n"
148
gdb_expect {
149
   -re "$gdb_prompt $" {
150
      pass "set var (not really a pass)"
151
    }
152
    timeout { fail "(timeout) " }
153
}
154
 
155
# Now print the pointer again
156
 
157
send_gdb "print pmi\n"
158
gdb_expect {
159
   -re "\\$\[0-9\]* = \\(int \\( A::\\*\\)\\) &A::jj\r\n$gdb_prompt $" {
160
      pass "print pmi after setting"
161
    }
162
    -re ".*$gdb_prompt $" { fail "print pmi after setting" }
163
    timeout { fail "(timeout) print pmi after setting" }
164
}
165
 
166
# print dereferenced pointer to data member again
167
 
168
send_gdb "print a.*pmi\n"
169
gdb_expect {
170
   -re "\\$\[0-9\]* = 1331\r\n$gdb_prompt $" {
171
      pass "print a.*pmi after setting"
172
    }
173
    -re ".*$gdb_prompt $" { fail "print a.*pmi after setting" }
174
    timeout { fail "(timeout) print a.*pmi after setting" }
175
}
176
 
177
# set the pointer to data member back to A::j
178
 
179
send_gdb "set var pmi = &A::j\n"
180
gdb_expect {
181
   -re "$gdb_prompt $" {
182
      pass "set var back to A::j (not really a pass)"
183
    }
184
    timeout { fail "(timeout) set var pmi" }
185
}
186
 
187
# print dereferenced pointer to data member yet again (extra check, why not)
188
 
189
send_gdb "print a.*pmi\n"
190
gdb_expect {
191
   -re "\\$\[0-9\]* = 121\r\n$gdb_prompt $" {
192
      pass "print a.*pmi after resetting"
193
    }
194
    -re ".*$gdb_prompt $" { fail "print a.*pmi after resetting" }
195
    timeout { fail "(timeout) print a.*pmi after resetting" }
196
}
197
 
198
# Set the data member pointed to.
199
 
200
send_gdb "print a.*pmi = 33\n"
201
gdb_expect {
202
   -re "\\$\[0-9\]* = 33\r\n$gdb_prompt $" {
203
      pass "print command to set"
204
    }
205
    -re ".*$gdb_prompt $" { fail "print command to set" }
206
    timeout { fail "(timeout) print command to set" }
207
}
208
 
209
# Now check that the data really was changed
210
send_gdb "print a.*pmi\n"
211
gdb_expect {
212
   -re "\\$\[0-9\]* = 33\r\n$gdb_prompt $" {
213
      pass "print a.*pmi after setting member pointed to"
214
    }
215
    -re ".*$gdb_prompt $" { fail "print a.*pmi after setting member pointed to" }
216
    timeout { fail "(timeout) print a.*pmi after setting member pointed to" }
217
}
218
 
219
# Double-check by printing a.
220
setup_xfail "hppa*-*-*" CLLbs16901
221
send_gdb "print a\n"
222
gdb_expect {
223
   -re "\\$\[0-9\]* = \{c = 120 'x', j = 33, jj = 1331, static s = 10, Virtual table at $hex\}\r\n$gdb_prompt $" {
224
      pass "print a after setting member pointed to by pmi"
225
    }
226
    -re ".*$gdb_prompt $" { fail "print a after setting member pointed to by pmi" }
227
    timeout { fail "(timeout) print a after setting member pointed to by pmi" }
228
}
229
 
230
 
231
# Set the data member pointed to, using ->*
232
 
233
send_gdb "print a_p->*pmi = 44\n"
234
gdb_expect {
235
   -re "\\$\[0-9\]* = 44\r\n$gdb_prompt $" {
236
      pass "print command to set (->)"
237
    }
238
    -re ".*$gdb_prompt $" { fail "print command to set (->)" }
239
    timeout { fail "(timeout) print command to set (->)" }
240
}
241
 
242
# Now check that the data really was changed
243
send_gdb "print a_p->*pmi\n"
244
gdb_expect {
245
   -re "\\$\[0-9\]* = 44\r\n$gdb_prompt $" {
246
      pass "print a_p->*pmi after setting member pointed to"
247
    }
248
    -re ".*$gdb_prompt $" { fail "print a_p->*pmi after setting member pointed to" }
249
    timeout { fail "(timeout) print a_p->*pmi after setting member pointed to" }
250
}
251
 
252
# Double-check by printing a.
253
setup_xfail "hppa*-*-*" CLLbs16901
254
send_gdb "print a\n"
255
gdb_expect {
256
   -re "\\$\[0-9\]* = \{c = 120 'x', j = 44, jj = 1331, static s = 10, Virtual table at $hex\}\r\n$gdb_prompt $" {
257
      pass "print a after setting member pointed to by pmi (->) "
258
    }
259
    -re ".*$gdb_prompt $" { fail "print a after setting member pointed to by pmi (->) " }
260
    timeout { fail "(timeout) print a after setting member pointed to by pmi (->) " }
261
}
262
 
263
 
264
# Do a ptype on the dereferenced pointer to member
265
# pai/1997-08-20 Doesn't work
266
 
267
# send_gdb "ptype a.*pmi\n"
268
# gdb_expect {
269
#   -re "type = int\r\n$gdb_prompt $" {
270
#      pass "ptype a.*pmi"
271
#    }
272
#    -re ".*$gdb_prompt $" { fail "ptype a.*pmi" }
273
#    timeout { fail "(timeout) ptype a.*pmi" }
274
#}
275
 
276
# Try to dereference the pointer to data member without any object
277
 
278
send_gdb "print *pmi\n"
279
gdb_expect {
280
   -re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" {
281
      pass "attempt to print ptr to member without object"
282
    }
283
    -re ".*$gdb_prompt $" { fail "attempt to print ptr to member without object" }
284
    timeout { fail "(timeout) attempt to print ptr to member without object" }
285
}
286
 
287
# Try to ptype a dereference of the pointer to data member without any object
288
 
289
send_gdb "ptype *pmi\n"
290
gdb_expect {
291
   -re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" {
292
      pass "attempt to ptype ptr to member without object"
293
    }
294
    -re ".*$gdb_prompt $" { fail "attempt to ptype ptr to member without object" }
295
    timeout { fail "(timeout) attempt to ptype ptr to member without object" }
296
}
297
 
298
# Ptype a pointer to a method.
299
 
300
setup_xfail "hppa*-*-*" CLLbs16901
301
send_gdb "ptype pmf\n"
302
gdb_expect {
303
   -re "type = int \\( A::\\*\\)\\(\\.\\.\\.\\)\r\n$gdb_prompt $" {
304
      pass "ptype pmf"
305
    }
306
    -re ".*$gdb_prompt $" { fail "ptype pmf" }
307
    timeout { fail "(timeout) ptype pmf" }
308
}
309
 
310
# print a pointer to a method
311
 
312
setup_xfail "hppa*-*-*" CLLbs16901
313
send_gdb "print pmf\n"
314
gdb_expect {
315
   -re "\\$\[0-9\]* = \\(int \\( A::\\*\\)\\(\\.\\.\\.\\)\\) \\?\\? \r\n$gdb_prompt $" {
316
      pass "print pmf"
317
    }
318
    -re ".*$gdb_prompt $" { fail "print pmf" }
319
    timeout { fail "(timeout) print pmf" }
320
}
321
 
322
 
323
# Ptype a pointer to a pointer to a method
324
 
325
setup_xfail "hppa*-*-*" CLLbs16901
326
send_gdb "ptype pmf_p\n"
327
gdb_expect {
328
   -re "type = int \\( A::\\*\\*\\)\\(\\.\\.\\.\\)\r\n$gdb_prompt $" {
329
      pass "ptype pmf_p"
330
    }
331
    -re ".*$gdb_prompt $" { fail "ptype pmf_p" }
332
    timeout { fail "(timeout) ptype pmf_p" }
333
}
334
 
335
# print a pointer to a pointer to a method
336
 
337
setup_xfail "hppa*-*-*" CLLbs16901
338
send_gdb "print pmf_p\n"
339
gdb_expect {
340
   -re "\\$\[0-9\]* = \\(int \\( A::\\*\\*\\)\\(\\.\\.\\.\\)\\) $hex\r\n$gdb_prompt $" {
341
      pass "print pmf_p"
342
    }
343
    -re ".*$gdb_prompt $" { fail "print pmf_p" }
344
    timeout { fail "(timeout) print pmf_p" }
345
}
346
 
347
# print dereferenced pointer to method
348
 
349
setup_xfail "hppa*-*-*" CLLbs16901
350
send_gdb "print a.*pmf\n"
351
gdb_expect {
352
   -re "Pointers to methods not supported with HP aCC\r\n$gdb_prompt $" {
353
      pass "print a.*pmf (known aCC limitation)"
354
    }
355
    -re ".*$gdb_prompt $" { fail "print a.*pmf" }
356
    timeout { fail "(timeout) print a.*pmf" }
357
}
358
 
359
# print dereferenced pointer to method, using ->*
360
 
361
setup_xfail "hppa*-*-*" CLLbs16901
362
send_gdb "print a_p->*pmf\n"
363
gdb_expect {
364
   -re "Pointers to methods not supported with HP aCC\r\n$gdb_prompt $" {
365
      pass "print a_p->*pmf (known aCC limitation)"
366
    }
367
    -re ".*$gdb_prompt $" { fail "print a_p->*pmf" }
368
    timeout { fail "(timeout) print a_p->*pmf" }
369
}
370
 
371
# set the pointer to data member
372
 
373
setup_xfail "hppa*-*-*"
374
send_gdb "set var pmf = &A::foo\n"
375
gdb_expect {
376
   -re "Assignment to pointers to methods not implemented with HP aCC\r\n$gdb_prompt $" {
377
      pass "set var pmf (known aCC limitation)"
378
    }
379
    -re ".*$gdb_prompt $" { fail "set var pmf" }
380
    timeout { fail "(timeout) set var pmf" }
381
}
382
 
383
# Try to dereference the pointer to method without any object
384
 
385
setup_xfail "hppa*-*-*" CLLbs16901
386
send_gdb "print *pmf\n"
387
gdb_expect {
388
   -re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" {
389
      pass "attempt to print  ptr to method without object"
390
    }
391
    -re ".*$gdb_prompt $" { fail "attempt to print ptr to method without object" }
392
    timeout { fail "(timeout) attempt to print ptr to method without object" }
393
}
394
 
395
# Try to ptype a dereference of the pointer to method without any object
396
 
397
send_gdb "ptype *pmi\n"
398
gdb_expect {
399
   -re "Attempt to dereference pointer to member without an object\r\n$gdb_prompt $" {
400
      pass "attempt to ptype ptr to member without object"
401
    }
402
    -re ".*$gdb_prompt $" { fail "attempt to ptype ptr to member without object" }
403
    timeout { fail "(timeout) attempt to ptype ptr to member without object" }
404
}
405
 
406
# Check cast of pointer to member to integer
407
setup_xfail "hppa*-*-*" CLLbs16901
408
send_gdb "print (int) pmi\n"
409
gdb_expect {
410
   -re "\\$\[0-9\]* = 8\r\n$gdb_prompt $" {
411
      pass "casting pmi to int"
412
    }
413
    -re ".*$gdb_prompt $" { fail "casting pmi to int" }
414
    timeout { fail "(timeout) casting pmi to int" }
415
}
416
 
417
# Check cast of pointer to method to integer
418
setup_xfail "hppa*-*-*" CLLbs16901
419
send_gdb "print (int) pmf\n"
420
gdb_expect {
421
   -re "Pointers to methods not supported with HP aCC\r\n$gdb_prompt $" {
422
      pass "casting pmf to int (known aCC limitation)"
423
    }
424
    -re ".*$gdb_prompt $" { fail "casting pmf to int" }
425
    timeout { fail "(timeout) casting pmf to int" }
426
}
427
 
428
# Try to invoke a function through a pointer to data member
429
setup_xfail "hppa*-*-*" CLLbs16901
430
send_gdb "print (a.*pmi)(3)\n"
431
gdb_expect {
432
   -re "Not implemented: function invocation through pointer to method with HP aCC\r\n$gdb_prompt $" {
433
      pass "print (a.*pmi)(3) -- error message should be different"
434
    }
435
    -re ".*$gdb_prompt $" { fail "print (a.*pmi)(3)" }
436
    timeout { fail "(timeout) print (a.*pmi)(3)" }
437
}
438
 
439
# Try to invoke a function through a pointer to a method
440
setup_xfail "hppa*-*-*" CLLbs16901
441
send_gdb "print (a.*pmf)(3)\n"
442
gdb_expect {
443
   -re "Not implemented: function invocation through pointer to method with HP aCC\r\n$gdb_prompt $" {
444
      pass "print (a.*pmi)(3) -- known aCC limitation"
445
    }
446
    -re ".*$gdb_prompt $" { fail "print (a.*pmf)(3)" }
447
    timeout { fail "(timeout) print (a.*pmf)(3)" }
448
}
449
 
450
 
451
# Go past assignment of NULL to pmi
452
setup_xfail "hppa*-*-*" CLLbs16901
453
send_gdb "next\n"
454
gdb_expect {
455
   -re "\r\n85\[ \t\]*k = \\(a.\\*pmf\\)\\(3\\);\r\n$gdb_prompt $" {
456
      pass "next past 83"
457
    }
458
    -re ".*$gdb_prompt $" { fail "next past 83" }
459
    timeout { fail "(timeout) next past 83" }
460
}
461
 
462
#send_gdb "print pmi\n"
463
#gdb_expect {
464
#   -re "Attempted dereference of null pointer-to-member\r\n$gdb_prompt $" {
465
#      pass ""
466
#    }
467
#    -re ".*$gdb_prompt $" { fail "" }
468
#    timeout { fail "(timeout) " }
469
#}
470
 
471
# Dereference the null pointer to member
472
setup_xfail "hppa*-*-*" CLLbs16901
473
send_gdb "print a.*pmi\n"
474
gdb_expect {
475
   -re "Attempted dereference of null pointer-to-member\r\n$gdb_prompt $" {
476
      pass "print a.*NULL"
477
    }
478
    -re ".*$gdb_prompt $" { fail "print a.*NULL" }
479
    timeout { fail "(timeout) print a.*NULL" }
480
}
481
 
482
 
483
# Go to another part of the program
484
send_gdb "break 91\n"
485
gdb_expect {
486
   -re "Breakpoint \[0-9\]*.*line 91\\.\r\n$gdb_prompt $" {
487
      pass "set break at 91"
488
    }
489
    -re ".*$gdb_prompt $" { fail "set break at 91" }
490
    timeout { fail "(timeout) set break at 91" }
491
}
492
 
493
setup_xfail "hppa*-*-*" CLLbs16901
494
send_gdb "continue\n"
495
gdb_expect {
496
   -re "Continuing\\.\r\n\r\nBreakpoint.*at.*member-ptr\\.cc:91\r\n91\[ \t]*k = \\(a.\\*pmf\\)\\(4\\);\r\n$gdb_prompt $" {
497
      pass "continue to 91"
498
    }
499
    -re ".*$gdb_prompt $" { fail "continue to 91" }
500
    timeout { fail "(timeout) continue to 91" }
501
}
502
 
503
 
504
# Now check again that pmi works even when not set to
505
# something that's at the beginning of the object
506
 
507
setup_xfail "hppa*-*-*" CLLbs16901
508
send_gdb "print pmi\n"
509
gdb_expect {
510
   -re "\\$\[0-9\]* = \\(int \\( A::\\*\\)\\) &A::jj\r\n$gdb_prompt $" {
511
      pass "print pmi (2)"
512
    }
513
    -re ".*$gdb_prompt $" { fail "print pmi (2)" }
514
    timeout { fail "(timeout) print pmi (2)" }
515
}
516
 
517
 
518
# print dereferenced pointer to data member
519
 
520
setup_xfail "hppa*-*-*" CLLbs16901
521
send_gdb "print a.*pmi\n"
522
gdb_expect {
523
   -re "\\$\[0-9\]* = 1331\r\n$gdb_prompt $" {
524
      pass "print a.*pmi (2)"
525
    }
526
    -re ".*$gdb_prompt $" { fail "print a.*pmi (2)" }
527
    timeout { fail "(timeout) print a.*pmi (2)" }
528
}
529
 
530
# print dereferenced pointer to data member
531
# this time, dereferenced through a pointer
532
 
533
setup_xfail "hppa*-*-*" CLLbs16901
534
send_gdb "print a_p->*pmi\n"
535
gdb_expect {
536
   -re "\\$\[0-9\]* = 1331\r\n$gdb_prompt $" {
537
      pass "print a->*pmi"
538
    }
539
    -re ".*$gdb_prompt $" { fail "print a->*pmi (2)" }
540
    timeout { fail "(timeout) print a->*pmi (2)" }
541
}
542
 
543
 
544
# p a.*pmf - fail
545
 
546
# p pmi
547
 
548
# p a.*pmi
549
 

powered by: WebSVN 2.1.0

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