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