xref: /openbsd-src/gnu/usr.bin/binutils/gdb/testsuite/gdb.base/miscexprs.exp (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
1*b725ae77Skettenis# Copyright 1998, 1999, 2000 Free Software Foundation, Inc.
2*b725ae77Skettenis
3*b725ae77Skettenis# This program is free software; you can redistribute it and/or modify
4*b725ae77Skettenis# it under the terms of the GNU General Public License as published by
5*b725ae77Skettenis# the Free Software Foundation; either version 2 of the License, or
6*b725ae77Skettenis# (at your option) any later version.
7*b725ae77Skettenis#
8*b725ae77Skettenis# This program is distributed in the hope that it will be useful,
9*b725ae77Skettenis# but WITHOUT ANY WARRANTY; without even the implied warranty of
10*b725ae77Skettenis# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11*b725ae77Skettenis# GNU General Public License for more details.
12*b725ae77Skettenis#
13*b725ae77Skettenis# You should have received a copy of the GNU General Public License
14*b725ae77Skettenis# along with this program; if not, write to the Free Software
15*b725ae77Skettenis# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
16*b725ae77Skettenis
17*b725ae77Skettenis# Please email any bugs, comments, and/or additions to this file to:
18*b725ae77Skettenis# bug-gdb@prep.ai.mit.edu
19*b725ae77Skettenis
20*b725ae77Skettenis
21*b725ae77Skettenis# This file is part of the gdb testsuite
22*b725ae77Skettenis# file written by Elena Zannoni (ezannoni@cygnus.com)
23*b725ae77Skettenis
24*b725ae77Skettenis#
25*b725ae77Skettenis# tests for expressions with struct/array elements and mixed operator types
26*b725ae77Skettenis# with elementary types
27*b725ae77Skettenis#
28*b725ae77Skettenis
29*b725ae77Skettenisif $tracelevel then {
30*b725ae77Skettenis        strace $tracelevel
31*b725ae77Skettenis        }
32*b725ae77Skettenis
33*b725ae77Skettenis# By default, the datastructures are allocated on the stack.  For targets
34*b725ae77Skettenis# with very small stack, that will not work.  In that case, just set
35*b725ae77Skettenis# storage to `-DSTORAGE=static' which changes the datastructures to be
36*b725ae77Skettenis# allocated in data segment.
37*b725ae77Skettenisset storage "-DSTORAGE="
38*b725ae77Skettenisif [target_info exists gdb,small_stack_section] {
39*b725ae77Skettenis    set storage "-DSTORAGE=static"
40*b725ae77Skettenis}
41*b725ae77Skettenis
42*b725ae77Skettenisset additional_flags "additional_flags=-w ${storage}"
43*b725ae77Skettenis
44*b725ae77Skettenis#
45*b725ae77Skettenis# test running programs
46*b725ae77Skettenis#
47*b725ae77Skettenisset prms_id 0
48*b725ae77Skettenisset bug_id 0
49*b725ae77Skettenis
50*b725ae77Skettenisset testfile "miscexprs"
51*b725ae77Skettenisset srcfile ${testfile}.c
52*b725ae77Skettenisset binfile ${objdir}/${subdir}/${testfile}
53*b725ae77Skettenis
54*b725ae77Skettenisif  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ${additional_flags}]] != "" } {
55*b725ae77Skettenis    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
56*b725ae77Skettenis}
57*b725ae77Skettenis
58*b725ae77Skettenisif [get_compiler_info ${binfile}] {
59*b725ae77Skettenis    return -1;
60*b725ae77Skettenis}
61*b725ae77Skettenis
62*b725ae77Skettenisgdb_exit
63*b725ae77Skettenisgdb_start
64*b725ae77Skettenisgdb_reinitialize_dir $srcdir/$subdir
65*b725ae77Skettenisgdb_load ${binfile}
66*b725ae77Skettenis
67*b725ae77Skettenis
68*b725ae77Skettenis#
69*b725ae77Skettenis# set it up at a breakpoint so we can play with the variable values
70*b725ae77Skettenis#
71*b725ae77Skettenisif ![runto_main] then {
72*b725ae77Skettenis    perror "couldn't run to breakpoint"
73*b725ae77Skettenis    continue
74*b725ae77Skettenis}
75*b725ae77Skettenis
76*b725ae77Skettenissend_gdb "break marker1\n" ; gdb_expect -re ".*$gdb_prompt $"
77*b725ae77Skettenis
78*b725ae77Skettenis    send_gdb "cont\n"
79*b725ae77Skettenis    gdb_expect {
80*b725ae77Skettenis        -re "Break.* marker1 \\(\\) at .*:$decimal.*$gdb_prompt $" {
81*b725ae77Skettenis            send_gdb "up\n"
82*b725ae77Skettenis            gdb_expect {
83*b725ae77Skettenis		-re ".*main.*$gdb_prompt $" {
84*b725ae77Skettenis		    pass "up from marker1"
85*b725ae77Skettenis		}
86*b725ae77Skettenis                -re ".*$gdb_prompt $" {
87*b725ae77Skettenis		    fail "up from marker1"
88*b725ae77Skettenis		}
89*b725ae77Skettenis                timeout { fail "up from marker1 (timeout)" }
90*b725ae77Skettenis            }
91*b725ae77Skettenis        }
92*b725ae77Skettenis        -re "$gdb_prompt $" { fail "continue to marker1"  }
93*b725ae77Skettenis        timeout { fail "(timeout) continue to marker1"  }
94*b725ae77Skettenis    }
95*b725ae77Skettenis
96*b725ae77Skettenisglobal hex
97*b725ae77Skettenis
98*b725ae77Skettenissend_gdb "print &ibig.i\[0\]\n"
99*b725ae77Skettenisgdb_expect {
100*b725ae77Skettenis    -re ".\[0-9\]* = \\(int \\*\\) $hex.*$gdb_prompt $" {
101*b725ae77Skettenis        pass "print value of &ibig.i\[0\]"
102*b725ae77Skettenis      }
103*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of &ibig.i\[0\]" }
104*b725ae77Skettenis    timeout           { fail "(timeout) print value of &ibig.i\[0\]" }
105*b725ae77Skettenis  }
106*b725ae77Skettenis
107*b725ae77Skettenissend_gdb "print &cbig.c\[0\]\n"
108*b725ae77Skettenisgdb_expect {
109*b725ae77Skettenis    -re ".\[0-9\]* = $hex \"\".*$gdb_prompt $" {
110*b725ae77Skettenis        pass "print value of &cbig.c\[0\]"
111*b725ae77Skettenis      }
112*b725ae77Skettenis    -re ".\[0-9\]* = $hex \"*\".*$gdb_prompt $" {
113*b725ae77Skettenis        pass "print value of &cbig.c\[0\]"
114*b725ae77Skettenis      }
115*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of &cbig.c\[0\]" }
116*b725ae77Skettenis    timeout           { fail "(timeout) print value of &cbig.c\[0\]" }
117*b725ae77Skettenis  }
118*b725ae77Skettenis
119*b725ae77Skettenissend_gdb "print &fbig.f\[0\]\n"
120*b725ae77Skettenisgdb_expect {
121*b725ae77Skettenis    -re ".\[0-9\]* = \\(float \\*\\) $hex.*$gdb_prompt $" {
122*b725ae77Skettenis        pass "print value of &fbig.f\[0\]"
123*b725ae77Skettenis      }
124*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of &fbig.f\[0\]" }
125*b725ae77Skettenis    timeout           { fail "(timeout) print value of &fbig.f\[0\]" }
126*b725ae77Skettenis  }
127*b725ae77Skettenis
128*b725ae77Skettenissend_gdb "print &dbig.d\[0\]\n"
129*b725ae77Skettenisgdb_expect {
130*b725ae77Skettenis    -re ".\[0-9\]* = \\(double \\*\\) $hex.*$gdb_prompt $" {
131*b725ae77Skettenis        pass "print value of &dbig.d\[0\]"
132*b725ae77Skettenis      }
133*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of &dbig.d\[0\]" }
134*b725ae77Skettenis    timeout           { fail "(timeout) print value of &dbig.d\[0\]" }
135*b725ae77Skettenis  }
136*b725ae77Skettenis
137*b725ae77Skettenissend_gdb "print &sbig.s\[0\]\n"
138*b725ae77Skettenisgdb_expect {
139*b725ae77Skettenis    -re ".\[0-9\]* = \\(short \\*\\) $hex.*$gdb_prompt $" {
140*b725ae77Skettenis        pass "print value of &sbig.s\[0\]"
141*b725ae77Skettenis    }
142*b725ae77Skettenis    -re ".\[0-9\]* = \\(short int \\*\\) $hex.*$gdb_prompt $" {
143*b725ae77Skettenis        pass "print value of &sbig.s\[0\]"
144*b725ae77Skettenis    }
145*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of &sbig.s\[0\]" }
146*b725ae77Skettenis    timeout           { fail "(timeout) print value of &sbig.s\[0\]" }
147*b725ae77Skettenis  }
148*b725ae77Skettenis
149*b725ae77Skettenissend_gdb "print &lbig.l\[0\]\n"
150*b725ae77Skettenisgdb_expect {
151*b725ae77Skettenis    -re ".\[0-9\]* = \\(long \\*\\) $hex.*$gdb_prompt $" {
152*b725ae77Skettenis        pass "print value of &lbig.l\[0\]"
153*b725ae77Skettenis    }
154*b725ae77Skettenis    -re ".\[0-9\]* = \\(long int \\*\\) $hex.*$gdb_prompt $" {
155*b725ae77Skettenis        pass "print value of &lbig.l\[0\]"
156*b725ae77Skettenis    }
157*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of &lbig.l\[0\]" }
158*b725ae77Skettenis    timeout           { fail "(timeout) print value of &lbig.l\[0\]" }
159*b725ae77Skettenis  }
160*b725ae77Skettenis
161*b725ae77Skettenis
162*b725ae77Skettenissend_gdb "print ibig.i\[100\] | 1\n"
163*b725ae77Skettenisgdb_expect {
164*b725ae77Skettenis    -re ".\[0-9\]* = 5.*$gdb_prompt $" {
165*b725ae77Skettenis        pass "print value of ibig.i\[100\] | 1"
166*b725ae77Skettenis      }
167*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of ibig.i\[100\] | 1" }
168*b725ae77Skettenis    timeout           { fail "(timeout) print value of ibig.i\[100\] | 1" }
169*b725ae77Skettenis  }
170*b725ae77Skettenis
171*b725ae77Skettenis
172*b725ae77Skettenissend_gdb "print sbig.s\[90\] & 127\n"
173*b725ae77Skettenisgdb_expect {
174*b725ae77Skettenis    -re ".\[0-9\]* = 127.*$gdb_prompt $" {
175*b725ae77Skettenis        pass "print value of sbig.s\[90\] & 127"
176*b725ae77Skettenis      }
177*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of sbig.s\[90\] & 127" }
178*b725ae77Skettenis    timeout           { fail "(timeout) print value of sbig.s\[90\] & 127" }
179*b725ae77Skettenis  }
180*b725ae77Skettenis
181*b725ae77Skettenissend_gdb "print !ibig.i\[100\]\n"
182*b725ae77Skettenisgdb_expect {
183*b725ae77Skettenis    -re ".\[0-9\]* = $false.*$gdb_prompt $" {
184*b725ae77Skettenis        pass "print value of !ibig.i\[100\]"
185*b725ae77Skettenis      }
186*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of !ibig.i\[100\]" }
187*b725ae77Skettenis    timeout           { fail "(timeout) print value of !ibig.i\[100\]" }
188*b725ae77Skettenis  }
189*b725ae77Skettenis
190*b725ae77Skettenissend_gdb "print !sbig.s\[90\]\n"
191*b725ae77Skettenisgdb_expect {
192*b725ae77Skettenis    -re ".\[0-9\]* = $false.*$gdb_prompt $" {
193*b725ae77Skettenis        pass "print value of !sbig.s\[90\]"
194*b725ae77Skettenis      }
195*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of !sbig.s\[90\]" }
196*b725ae77Skettenis    timeout           { fail "(timeout) print value of !sbig.s\[90\]" }
197*b725ae77Skettenis  }
198*b725ae77Skettenis
199*b725ae77Skettenis
200*b725ae77Skettenissend_gdb "print !fbig.f\[100\]\n"
201*b725ae77Skettenisgdb_expect {
202*b725ae77Skettenis    -re ".\[0-9\]* = $false.*$gdb_prompt $" {
203*b725ae77Skettenis        pass "print value of !ibig.i\[100\]"
204*b725ae77Skettenis      }
205*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of !ibig.i\[100\]" }
206*b725ae77Skettenis    timeout           { fail "(timeout) print value of !ibig.i\[100\]" }
207*b725ae77Skettenis  }
208*b725ae77Skettenis
209*b725ae77Skettenissend_gdb "print !dbig.d\[202\]\n"
210*b725ae77Skettenisgdb_expect {
211*b725ae77Skettenis    -re ".\[0-9\]* = $false.*$gdb_prompt $" {
212*b725ae77Skettenis        pass "print value of !ibig.i\[100\]"
213*b725ae77Skettenis      }
214*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of !ibig.i\[100\]" }
215*b725ae77Skettenis    timeout           { fail "(timeout) print value of !ibig.i\[100\]" }
216*b725ae77Skettenis  }
217*b725ae77Skettenis
218*b725ae77Skettenis
219*b725ae77Skettenis
220*b725ae77Skettenissend_gdb "print sbig.s\[90\] * 10\n"
221*b725ae77Skettenisgdb_expect {
222*b725ae77Skettenis    -re ".\[0-9\]* = 2550.*$gdb_prompt $" {
223*b725ae77Skettenis        pass "print value of !sbig.s\[90\] * 10"
224*b725ae77Skettenis      }
225*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of !sbig.s\[90\] * 10" }
226*b725ae77Skettenis    timeout           { fail "(timeout) print value of !sbig.s\[90\] * 10" }
227*b725ae77Skettenis  }
228*b725ae77Skettenis
229*b725ae77Skettenissend_gdb "print ibig.i\[100\] * sbig.s\[90\]\n"
230*b725ae77Skettenisgdb_expect {
231*b725ae77Skettenis    -re ".\[0-9\]* = 1275.*$gdb_prompt $" {
232*b725ae77Skettenis        pass "print value of ibig.i\[100\] * sbig.s\[90\]"
233*b725ae77Skettenis      }
234*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of ibig.i\[100\] * sbig.s\[90\]" }
235*b725ae77Skettenis    timeout           { fail "(timeout) print value of ibig.i\[100\] * sbig.s\[90\]" }
236*b725ae77Skettenis  }
237*b725ae77Skettenis
238*b725ae77Skettenissend_gdb "print fbig.f\[100\] * dbig.d\[202\]\n"
239*b725ae77Skettenisgdb_expect {
240*b725ae77Skettenis    -re ".\[0-9\]* = 119.99\[0-9\]*.*$gdb_prompt $" {
241*b725ae77Skettenis        pass "print value of fbig.f\[100\] * dbig.d\[202\]"
242*b725ae77Skettenis      }
243*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of fbig.f\[100\] * dbig.d\[202\]" }
244*b725ae77Skettenis    timeout           { fail "(timeout) print value of fbig.f\[100\] * dbig.d\[202\]" }
245*b725ae77Skettenis  }
246*b725ae77Skettenis
247*b725ae77Skettenissend_gdb "print !(sbig.s\[90\] * 2)\n"
248*b725ae77Skettenisgdb_expect {
249*b725ae77Skettenis    -re ".\[0-9\]* = $false.*$gdb_prompt $" {
250*b725ae77Skettenis        pass "print value of !(sbig.s\[90\] * 2)"
251*b725ae77Skettenis      }
252*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of !(sbig.s\[90\] * 2)" }
253*b725ae77Skettenis    timeout           { fail "(timeout) print value of !(sbig.s\[90\] * 2)" }
254*b725ae77Skettenis  }
255*b725ae77Skettenis
256*b725ae77Skettenis
257*b725ae77Skettenissend_gdb "print sizeof(sbig)\n"
258*b725ae77Skettenisgdb_expect {
259*b725ae77Skettenis    -re ".\[0-9\]* = 800.*$gdb_prompt $" {
260*b725ae77Skettenis        pass "print value of sizeof(sbig)"
261*b725ae77Skettenis      }
262*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of sizeof(sbig)" }
263*b725ae77Skettenis    timeout           { fail "(timeout) print value of sizeof(sbig)" }
264*b725ae77Skettenis  }
265*b725ae77Skettenis
266*b725ae77Skettenis
267*b725ae77Skettenissend_gdb "print sizeof(cbig)\n"
268*b725ae77Skettenisgdb_expect {
269*b725ae77Skettenis    -re ".\[0-9\]* = 100.*$gdb_prompt $" {
270*b725ae77Skettenis        pass "print value of sizeof(cbig)"
271*b725ae77Skettenis      }
272*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of sizeof(cbig)" }
273*b725ae77Skettenis    timeout           { fail "(timeout) print value of sizeof(cbig)" }
274*b725ae77Skettenis  }
275*b725ae77Skettenis
276*b725ae77Skettenis
277*b725ae77Skettenissend_gdb "print sizeof(lbig)/sizeof(long)\n"
278*b725ae77Skettenisgdb_expect {
279*b725ae77Skettenis    -re ".\[0-9\]* = 900.*$gdb_prompt $" {
280*b725ae77Skettenis        pass "print value of sizeof(lbig)/sizeof(long)"
281*b725ae77Skettenis      }
282*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of sizeof(lbig)/sizeof(long)" }
283*b725ae77Skettenis    timeout     { fail "(timeout) print value of sizeof(lbig)/sizeof(long)" }
284*b725ae77Skettenis  }
285*b725ae77Skettenis
286*b725ae77Skettenissend_gdb "print ibig.i\[100\] << 2\n"
287*b725ae77Skettenisgdb_expect {
288*b725ae77Skettenis    -re ".\[0-9\]* = 20.*$gdb_prompt $" {
289*b725ae77Skettenis        pass "print value of ibig.i\[100\] << 2"
290*b725ae77Skettenis      }
291*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of ibig.i\[100\] << 2" }
292*b725ae77Skettenis    timeout           { fail "(timeout) print value of ibig.i\[100\] << 2" }
293*b725ae77Skettenis  }
294*b725ae77Skettenis
295*b725ae77Skettenissend_gdb "print sbig.s\[90\] >> 4\n"
296*b725ae77Skettenisgdb_expect {
297*b725ae77Skettenis    -re ".\[0-9\]* = 15.*$gdb_prompt $" {
298*b725ae77Skettenis        pass "print value of sbig.s\[90\] >> 4"
299*b725ae77Skettenis      }
300*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of sbig.s\[90\] >> 4" }
301*b725ae77Skettenis    timeout           { fail "(timeout) print value of sbig.s\[90\] >> 4" }
302*b725ae77Skettenis  }
303*b725ae77Skettenis
304*b725ae77Skettenissend_gdb "print lbig.l\[333\] >> 6\n"
305*b725ae77Skettenisgdb_expect {
306*b725ae77Skettenis    -re ".\[0-9\]* = 15624999.*$gdb_prompt $" {
307*b725ae77Skettenis        pass "print value of lbig.l\[333\] >> 6"
308*b725ae77Skettenis      }
309*b725ae77Skettenis    -re ".*$gdb_prompt $" { fail "print value of lbig.l\[333\] >> 6" }
310*b725ae77Skettenis    timeout           { fail "(timeout) print value of lbig.l\[333\] >> 6" }
311*b725ae77Skettenis  }
312