summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base/constvars.exp
blob: 68732867d502aa5e5923c096f01b6400079b6052 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
# Copyright 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004
# Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# written by Elena Zannoni (elz@apollo.hp.com)
#
# This file is part of the gdb testsuite
#
# tests for const variables
#           const pointers to vars
#           pointers to const variables
#           const pointers to const vars
# with mixed types

if $tracelevel then {
    strace $tracelevel
}

#
# test running programs
#
set prms_id 0
set bug_id 0

set testfile "constvars"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

# Create and source the file that provides information about the compiler
# used to compile the test case.
if [get_compiler_info ${binfile}] {
    return -1;
}

if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable debug ] != "" } {
    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}


#
# set it up at a breakpoint so we can play with the variable values
#
if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

get_debug_format

proc local_compiler_xfail_check { } {
    if { [test_compiler_info gcc-2-*] } then {
	if { ![test_debug_format "HP"] \
		&& ![test_debug_format "DWARF 2"] } then {
	    setup_xfail "*-*-*" 
	}
    }

    global hp_cc_compiler
    if { $hp_cc_compiler } {
	setup_xfail "hppa*-*-hpux*"
    }
}

send_gdb "break marker1\n" ; gdb_expect -re ".*$gdb_prompt $"

    send_gdb "cont\n"
    gdb_expect {
        -re "Break.* marker1 \\(\\) at .*:$decimal.*$gdb_prompt $" {
            send_gdb "up\n"
            gdb_expect {
		-re ".*main.*$gdb_prompt $" {
		    pass "up from marker1"
		}
                -re ".*$gdb_prompt $" {
		    fail "up from marker1"
		}
                timeout { fail "up from marker1 (timeout)" }
            }
        }
        -re "Break.* marker1__.* \\(\\) at .*:$decimal.*$gdb_prompt $" {
	    fail "continue to marker1 (demangling)"
            send_gdb "up\n"
            gdb_expect {
		-re ".*main.*$gdb_prompt $" {
		    pass "up from marker1"
		}
                -re ".*$gdb_prompt $" {
		    fail "up from marker1"
		}
                timeout { fail "up from marker1 (timeout)" }
            }
        }
        -re "$gdb_prompt $" { fail "continue to marker1"  }
        timeout { fail "(timeout) continue to marker1"  }
    }

# test function parameters

local_compiler_xfail_check
if { [test_compiler_info gcc-3-*] && [test_debug_format "stabs"] } then {
    # With stabs, even GCC 3 does not get the const char arguments correct.
    setup_xfail "*-*-*"
}
send_gdb "ptype qux1\n"
gdb_expect {
    -re "type = int \\(const char, const char, const char \\*, char \\* const\\).*$gdb_prompt $" {
        pass "ptype qux1"
    }
    -re ".*$gdb_prompt $" { fail "ptype qux1" }
    timeout           { fail "(timeout) ptype qux1" }
}   

# test vars and pointers

proc do_constvar_tests {} {
    gdb_test "print lave" " = 66 'B'"
    gdb_test "ptype lave" "type = char"
    gdb_test "print lavish" " = 10 '\\\\n'"
    gdb_test "ptype lavish" "type = unsigned char"
    gdb_test "print lax" " = 20"
    gdb_test "ptype lax" "type = short.*"
    gdb_test "print lecherous" " = 30"
    gdb_test "ptype lecherous" "type = (unsigned short|short unsigned)( int)?"
    gdb_test "print lechery" " = 40"
    gdb_test "ptype lechery" "type = long.*"
    gdb_test "print lectern" " = 50"
    gdb_test "ptype lectern" "type = (unsigned long|long unsigned)( int)?"
    gdb_test "print leeway" " = 60"
    gdb_test "ptype leeway" "type = float"
    gdb_test "print legacy" " = 70"
    gdb_test "ptype legacy" "type = double"
    gdb_test "print laconic" " = 65 'A'"
    local_compiler_xfail_check
    gdb_test "ptype laconic" "type = const char"
    gdb_test "print laggard" " = 1 '.001'"
    local_compiler_xfail_check
    gdb_test "ptype laggard" "type = const unsigned char"
    gdb_test "print lagoon" " = 2"
    local_compiler_xfail_check
    gdb_test "ptype lagoon" "type = const short( int)?"
    gdb_test "print laity" " = 3"
    local_compiler_xfail_check
    gdb_test "ptype laity" "type = const (unsigned short|short unsigned)( int)?"
    gdb_test "print lambent" " = 4"
    local_compiler_xfail_check
    gdb_test "ptype lambent" "type = const long( int)?"
    gdb_test "print laminated" " = 5"
    local_compiler_xfail_check
    gdb_test "ptype laminated" "type = const (unsigned long|long unsigned)( int)?"
    gdb_test "print lampoon" " = 6"
    local_compiler_xfail_check
    gdb_test "ptype lampoon" "type = const float"
    gdb_test "print languid" " = 7"
    local_compiler_xfail_check
    gdb_test "ptype languid" "type = const double"
    gdb_test "print *legend" " = 66 'B'"
    local_compiler_xfail_check
    gdb_test "ptype legend" "type = const char \\*"
    gdb_test "print *legerdemain" " = 10 '\\\\n'"
    local_compiler_xfail_check
    gdb_test "ptype legerdemain" "type = const unsigned char \\*"
    gdb_test "print *leniency" " = 20"
    local_compiler_xfail_check
    gdb_test "ptype leniency" "type = const short( int)? \\*"
    gdb_test "print *leonine" " = 30"
    local_compiler_xfail_check
    gdb_test "ptype leonine" "type = const (unsigned short|short unsigned)( int)? \\*"
    gdb_test "print *lesion" " = 40"
    local_compiler_xfail_check
    gdb_test "ptype lesion" "type = const long( int)? \\*"
    gdb_test "print *lethal" " = 50"
    local_compiler_xfail_check
    gdb_test "ptype lethal" "type = const (unsigned long|long unsigned)( int)? \\*"
    gdb_test "print *lethargic" " = 60"
    local_compiler_xfail_check
    gdb_test "ptype lethargic" "type = const float \\*"
    gdb_test "print *levity" " = 70"
    local_compiler_xfail_check
    gdb_test "ptype levity" "type = const double \\*"
    gdb_test "print *lewd" " = 65 'A'"
    local_compiler_xfail_check
    gdb_test "ptype lewd" "type = const char \\* const"
    gdb_test "print *lexicographer" " = 1 '.001'"
    local_compiler_xfail_check
    gdb_test "ptype lexicographer" "type = const unsigned char \\* const"
    gdb_test "print *lexicon" " = 2"
    local_compiler_xfail_check
    gdb_test "ptype lexicon" "type = const short( int)? \\* const"
    gdb_test "print *liaison" " = 3"
    local_compiler_xfail_check
    gdb_test "ptype liaison" "type = const (unsigned short|short unsigned)( int)? \\* const"
    gdb_test "print *libation" " = 4"
    local_compiler_xfail_check
    gdb_test "ptype libation" "type = const long( int)? \\* const"
    gdb_test "print *libelous" " = 5"
    local_compiler_xfail_check
    gdb_test "ptype libelous" "type = const (unsigned long|long unsigned)( int)? \\* const"
    gdb_test "print *libertine" " = 6"
    local_compiler_xfail_check
    gdb_test "ptype libertine" "type = const float \\* const"
    gdb_test "print *libidinous" " = 7"
    local_compiler_xfail_check
    gdb_test "ptype libidinous" "type = const double \\* const"
    gdb_test "print *languish" " = 65 'A'"
    local_compiler_xfail_check
    gdb_test "ptype languish" "type = const char \\*"
    gdb_test "print *languor" " = 1 '.001'"
    local_compiler_xfail_check
    gdb_test "ptype languor" "type = const unsigned char \\*"
    gdb_test "print *lank" " = 2"
    local_compiler_xfail_check
    gdb_test "ptype lank" "type = const short( int)? \\*"
    gdb_test "print *lapidary" " = 3"
    local_compiler_xfail_check
    gdb_test "ptype lapidary" "type = const (unsigned short|short unsigned)( int)? \\*"
    gdb_test "print *larceny" " = 4"
    local_compiler_xfail_check
    gdb_test "ptype larceny" "type = const long( int)? \\*"
    gdb_test "print *largess" " = 5"
    local_compiler_xfail_check
    gdb_test "ptype largess" "type = const (unsigned long|long unsigned)( int)? \\*"
    gdb_test "print *lascivious" " = 6"
    local_compiler_xfail_check

    gdb_test "ptype lascivious" "type = const float \\*"
    gdb_test "print *lassitude" " = 7"
    local_compiler_xfail_check
    gdb_test "ptype lassitude" "type = const double \\*"
    gdb_test "print *lamprey" " = 66 'B'"
    local_compiler_xfail_check
    gdb_test "ptype lamprey" "type = char \\* const"
    gdb_test "print *lariat" " = 10 '\\\\n'"
    local_compiler_xfail_check
    gdb_test "ptype lariat" "type = unsigned char \\* const"
    gdb_test "print *laudanum" " = 20"
    local_compiler_xfail_check
    gdb_test "ptype laudanum" "type = short( int)? \\* const"
    gdb_test "print *lecithin" " = 30"
    local_compiler_xfail_check
    gdb_test "ptype lecithin" "type = (unsigned short|short unsigned)( int)? \\* const"
    gdb_test "print *leviathan" " = 40"
    local_compiler_xfail_check
    gdb_test "ptype leviathan" "type = long( int)? \\* const"
    gdb_test "print *libretto" " = 50"
    local_compiler_xfail_check
    gdb_test "ptype libretto" "type = (unsigned long|long unsigned)( int)? \\* const"
    gdb_test "print *lissome" " = 60"
    local_compiler_xfail_check
    gdb_test "ptype lissome" "type = float \\* const"
    gdb_test "print *locust" " = 70"
    local_compiler_xfail_check
    gdb_test "ptype locust" "type = double \\* const"

    local_compiler_xfail_check
    if { [test_compiler_info gcc-3-*] && [test_debug_format "stabs"] } then {
	# With stabs, even GCC 3 does not get the constant structure member
	# correct.
	setup_xfail "*-*-*"
    }
    gdb_test "ptype crass" "type = struct crass \{\[\r\n\]+\[\ \t\]+char \\* const ptr;\[\r\n\]+\}"
    local_compiler_xfail_check
    gdb_test "ptype crisp" "type = struct crisp \{\[\r\n\]+\[\ \t\]+char \\* const \\*ptr;\[\r\n\]+\}"
}

do_constvar_tests