Update/correct copyright notices.
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.c++ / anon-union.exp
CommitLineData
d4f3574e 1# Tests for anonymous union support.
b6ba6518 2# Copyright 1998, 1999 Free Software Foundation, Inc.
c906108c
SS
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# Please email any bugs, comments, and/or additions to this file to:
19# bug-gdb@prep.ai.mit.edu
20
c906108c
SS
21# Written by Satish Pai <pai@apollo.hp.com> 1997-08-19
22
23# This file is part of the gdb testsuite
24
25if $tracelevel then {
26 strace $tracelevel
27 }
28
29#
30# test running programs
31#
32
33set prms_id 0
34set bug_id 0
35
d4f3574e
SS
36if { [skip_cplus_tests] } { continue }
37
c906108c
SS
38set testfile "anon-union"
39set srcfile ${testfile}.cc
40set binfile ${objdir}/${subdir}/${testfile}
d4f3574e 41
c906108c
SS
42if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug c++}] != "" } {
43 gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
44}
45
46# Start with a fresh gdb
47gdb_exit
48gdb_start
49gdb_reinitialize_dir $srcdir/$subdir
50gdb_load ${binfile}
51
52
53if ![runto_main] then {
54 perror "couldn't run to breakpoint"
55 continue
56}
57
58send_gdb "set width 0\n"
59gdb_expect -re "$gdb_prompt $"
60
61#send_gdb "ptype foo\n"
62#gdb_expect {
63# -re "\r\n$gdb_prompt $" {
64# pass "ptype foo"
65# }
66# -re ".*$gdb_prompt $" { fail "ptype foo" }
67# timeout { fail "(timeout) ptype foo" }
68#}
69
70#send_gdb "ptype bar\n"
71#gdb_expect {
72# -re "\r\n$gdb_prompt $" {
73# pass "ptype foo"
74# }
75# -re ".*$gdb_prompt $" { fail "ptype foo" }
76# timeout { fail "(timeout) ptype foo" }
77#}
78
79# NOTE: Add -- ptype foo.x, etc. when things are working
80
a0b3c4fd
JM
81#Initialize foo
82send_gdb "next\n"
83gdb_expect {
84 -re "40\[ \t\]*foo.paper = 33;\r\n$gdb_prompt $" {
85 pass "next 1"
86 }
87 -re ".*$gdb_prompt $" { fail "next 1" }
88 timeout { fail "(timeout) next 1" }
89}
90
c906108c
SS
91# Print out the big anon union.
92send_gdb "print foo\n"
93gdb_expect {
94 -re "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 0, x = \{rock = 0, rock2 = 0\}, \{qux = 0, mux = 0\}, boulder = 0\}, \{paper = 0, cloth = 0\}, num2 = \{two = 0, three = 0\}\}\r\n$gdb_prompt $" {
95 pass "print foo 1"
96 }
97 -re ".*$gdb_prompt $" { fail "print foo 1" }
98 timeout { fail "(timeout) print foo 1" }
99}
100
101# Step over assignment to member
102
103send_gdb "next\n"
104gdb_expect {
105 -re "41\[ \t\]*foo.pebble = 44;\r\n$gdb_prompt $" {
106 pass "next 1"
107 }
108 -re ".*$gdb_prompt $" { fail "next 1" }
109 timeout { fail "(timeout) next 1" }
110}
111
112# Now print out anon union again
113send_gdb "print foo\n"
114gdb_expect {
115 -re "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 0, x = \{rock = 0, rock2 = 0\}, \{qux = 0, mux = 0\}, boulder = 0\}, \{paper = 33, cloth = 33\}, num2 = \{two = 0, three = 0\}\}\r\n$gdb_prompt $" {
116 pass "print foo 2"
117 }
118 -re ".*$gdb_prompt $" { fail "print foo 2" }
119 timeout { fail "(timeout) print foo 2" }
120}
121
122# Modify the member just set
123send_gdb "set var foo.cloth = 35\n"
124gdb_expect {
125 -re "\r\n$gdb_prompt $" {
126 pass "set var foo.cloth"
127 }
128 timeout { fail "(timeout) set var foo.cloth" }
129}
130
131# Now print out anon union again to see if the right member was set
132send_gdb "print foo\n"
133gdb_expect {
134 -re "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 0, x = \{rock = 0, rock2 = 0\}, \{qux = 0, mux = 0\}, boulder = 0\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}\r\n$gdb_prompt $" {
135 pass "print foo 3"
136 }
137 -re ".*$gdb_prompt $" { fail "print foo 3" }
138 timeout { fail "(timeout) print foo 3" }
139}
140
141
142# Step over next assignment to member
143
144send_gdb "next\n"
145gdb_expect {
146 -re "42\[ \t\]*foo.mux = 55;\r\n$gdb_prompt $" {
147 pass "next 2"
148 }
149 -re ".*$gdb_prompt $" { fail "next 2" }
150 timeout { fail "(timeout) next 2" }
151}
152
153# Now print out anon union again
154send_gdb "print foo\n"
155gdb_expect {
156 -re "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 44, x = \{rock = 44, rock2 = 0\}, \{qux = 44, mux = 44\}, boulder = 44\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}\r\n$gdb_prompt $" {
157 pass "print foo 4"
158 }
159 -re ".*$gdb_prompt $" { fail "print foo 4" }
160 timeout { fail "(timeout) print foo 4" }
161}
162
163# Modify the member just set
164send_gdb "set var foo.pebble = 45\n"
165gdb_expect {
166 -re "\r\n$gdb_prompt $" {
167 pass "set var foo.pebble"
168 }
169 timeout { fail "(timeout) set var foo.pebble" }
170}
171
172# Now print out anon union again to see if the right member was set
173send_gdb "print foo\n"
174gdb_expect {
175 -re "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 45, x = \{rock = 45, rock2 = 0\}, \{qux = 45, mux = 45\}, boulder = 45\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}\r\n$gdb_prompt $" {
176 pass "print foo 5"
177 }
178 -re ".*$gdb_prompt $" { fail "print foo 5" }
179 timeout { fail "(timeout) print foo 5" }
180}
181
182# Modify another member at a different level
183send_gdb "set var foo.qux = 46\n"
184gdb_expect {
185 -re "\r\n$gdb_prompt $" {
186 pass "set var foo.qux"
187 }
188 timeout { fail "(timeout) set var foo.qux" }
189}
190
191# Now print out anon union again to see if the right member was set
192send_gdb "print foo\n"
193gdb_expect {
194 -re "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 46, x = \{rock = 46, rock2 = 0\}, \{qux = 46, mux = 46\}, boulder = 46\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}\r\n$gdb_prompt $" {
195 pass "print foo 6"
196 }
197 -re ".*$gdb_prompt $" { fail "print foo 6" }
198 timeout { fail "(timeout) print foo 6" }
199}
200
201# Modify the member at another level, but not the first one in the union
202send_gdb "set var foo.mux = 47\n"
203gdb_expect {
204 -re "\r\n$gdb_prompt $" {
205 pass "set var foo.mux"
206 }
207 timeout { fail "(timeout) set var foo.mux" }
208}
209
210# Now print out anon union again to see if things worked
211send_gdb "print foo\n"
212gdb_expect {
213 -re "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 47, x = \{rock = 47, rock2 = 0\}, \{qux = 47, mux = 47\}, boulder = 47\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}\r\n$gdb_prompt $" {
214 pass "print foo 7"
215 }
216 -re ".*$gdb_prompt $" { fail "print foo 7" }
217 timeout { fail "(timeout) print foo 7" }
218}
219
220# Modify a member of a struct in an anon union
221send_gdb "set var foo.x.rock = 48\n"
222gdb_expect {
223 -re "\r\n$gdb_prompt $" {
224 pass "set var foo.x.rock"
225 }
226 timeout { fail "(timeout) set var foo.x.rock" }
227}
228
229# Now print out anon union again to see if things worked
230send_gdb "print foo\n"
231gdb_expect {
232 -re "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 48, x = \{rock = 48, rock2 = 0\}, \{qux = 48, mux = 48\}, boulder = 48\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}\r\n$gdb_prompt $" {
233 pass "print foo 8"
234 }
235 -re ".*$gdb_prompt $" { fail "print foo 8" }
236 timeout { fail "(timeout) print foo 8" }
237}
238
239# Modify a member of a struct in an anon union, but something
240# that doesn't alias to some other union member
241send_gdb "set var foo.x.rock2 = 49\n"
242gdb_expect {
243 -re "\r\n$gdb_prompt $" {
244 pass "set var foo.x.rock2"
245 }
246 timeout { fail "(timeout) set var foo.x.rock2" }
247}
248
249# Now print out anon union again to see if things worked
250send_gdb "print foo\n"
251gdb_expect {
252 -re "\\$\[0-9\]* = \{num1 = \{zero = 0, one = 0\}, \{pebble = 48, x = \{rock = 48, rock2 = 49\}, \{qux = 48, mux = 48\}, boulder = 48\}, \{paper = 35, cloth = 35\}, num2 = \{two = 0, three = 0\}\}\r\n$gdb_prompt $" {
253 pass "print foo 9"
254 }
255 -re ".*$gdb_prompt $" { fail "print foo 9" }
256 timeout { fail "(timeout) print foo 9" }
257}
258
259
a0b3c4fd
JM
260# Step over next four assignments
261send_gdb "next 4\n"
c906108c 262gdb_expect {
a0b3c4fd 263 -re "53\[ \t\]*w = 45;\r\n$gdb_prompt $" {
c906108c
SS
264 pass "next 3"
265 }
266 -re ".*$gdb_prompt $" { fail "next 3" }
267 timeout { fail "(timeout) next 3" }
268}
269
270# Tests for anon unions that are not members of a class or struct
271
a0b3c4fd
JM
272send_gdb "print w\n"
273gdb_expect {
274 -re "\\$\[0-9\]* = 0\r\n$gdb_prompt $" {
275 pass "print w 1"
276 }
277 -re ".*$gdb_prompt $" { fail "print w 1" }
278 timeout { fail "(timeout) print w 1" }
279}
280
281send_gdb "print z\n"
282gdb_expect {
283 -re "\\$\[0-9\]* = 0\r\n$gdb_prompt $" {
284 pass "print z 1"
285 }
286 -re ".*$gdb_prompt $" { fail "print z 1" }
287 timeout { fail "(timeout) print z 1" }
288}
c906108c
SS
289
290# Step over next assignment to w
291send_gdb "next\n"
292gdb_expect {
a0b3c4fd 293 -re "55\[ \t\]*\}\r\n$gdb_prompt $" {
c906108c
SS
294 pass "next 4"
295 }
296 -re ".*$gdb_prompt $" { fail "next 4" }
297 timeout { fail "(timeout) next 4" }
298}
299
300# See if the change in value is noticed
301send_gdb "print w\n"
302gdb_expect {
303 -re "\\$\[0-9\]* = 45\r\n$gdb_prompt $" {
304 pass "print w 2"
305 }
306 -re ".*$gdb_prompt $" { fail "print w 2" }
307 timeout { fail "(timeout) print w 2" }
308}
309
310# See if z shows the same value
311send_gdb "print z\n"
312gdb_expect {
313 -re "\\$\[0-9\]* = 45\r\n$gdb_prompt $" {
314 pass "print z 2"
315 }
316 -re ".*$gdb_prompt $" { fail "print z 2" }
317 timeout { fail "(timeout) print z 2" }
318}
319
320# Set the anon union member
321send_gdb "set var z = 27\n"
322gdb_expect {
323 -re "\r\n$gdb_prompt $" {
324 pass "set var z"
325 }
326 timeout { fail "(timeout) set var z" }
327}
328
329# See if the change in value is noticed
330send_gdb "print w\n"
331gdb_expect {
332 -re "\\$\[0-9\]* = 27\r\n$gdb_prompt $" {
333 pass "print w 3"
334 }
335 -re ".*$gdb_prompt $" { fail "print w 3" }
336 timeout { fail "(timeout) print w 3" }
337}
338
339# See if z shows the same value
340send_gdb "print z\n"
341gdb_expect {
342 -re "\\$\[0-9\]* = 27\r\n$gdb_prompt $" {
343 pass "print z 3"
344 }
345 -re ".*$gdb_prompt $" { fail "print z 3" }
346 timeout { fail "(timeout) print z 3" }
347}
This page took 0.111186 seconds and 4 git commands to generate.