* gdb.arch/i386-prologue.exp (skip_breakpoint): Fix setup_kfail
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / macscp.exp
CommitLineData
6827a8f8 1# Test macro scoping.
4c38e0a4 2# Copyright 2002, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
6827a8f8
JB
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
e22f8b7c 6# the Free Software Foundation; either version 3 of the License, or
6827a8f8 7# (at your option) any later version.
e22f8b7c 8#
6827a8f8
JB
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.
e22f8b7c 13#
6827a8f8 14# You should have received a copy of the GNU General Public License
e22f8b7c 15# along with this program. If not, see <http://www.gnu.org/licenses/>.
6827a8f8 16
6827a8f8
JB
17if $tracelevel then {
18 strace $tracelevel
19}
20
6827a8f8 21
d705c43c 22set srcfile macscp1.c
6827a8f8 23set testfile "macscp"
44aabfbc 24set objfile ${objdir}/${subdir}/${testfile}.o
6827a8f8
JB
25set binfile ${objdir}/${subdir}/${testfile}
26
484086b7 27set options { debug additional_flags=-DFROM_COMMANDLINE=ARG}
d848e687
DJ
28
29get_compiler_info ${binfile}
30if [test_compiler_info gcc*] {
31 lappend options additional_flags=-g3
32}
33
87bdc959
TG
34# Generate the intermediate object file. This is required by Darwin to
35# have access to the .debug_macinfo section.
36if {[gdb_compile "${srcdir}/${subdir}/macscp1.c" "${objfile}" \
37 object $options] != ""
38 || [gdb_compile "${objfile}" "${binfile}" executable $options] != "" } {
b60f0898
JB
39 untested macscp.exp
40 return -1
6827a8f8
JB
41}
42
43gdb_exit
44gdb_start
45gdb_reinitialize_dir $srcdir/$subdir
46gdb_load ${binfile}
47
48
49# Ask GDB to show the current definition of MACRO, and return a list
50# describing the result.
51#
52# The return value has the form {FILE1 FILE2 ... DEF}, which means
53# that MACRO has the definition `DEF', and was defined in `FILE1',
54# which was included from `FILE2', included from ... .
55#
56# If GDB says that MACRO has no definition, return the string `undefined'.
57#
58# If GDB complains that it doesn't have any information about
59# preprocessor macro definitions, return the string `no-macro-info'.
60#
61# If expect times out waiting for GDB, we return the string `timeout'.
62#
63# If GDB's output doesn't otherwise match what we're expecting, we
64# return the empty string.
65
66proc info_macro {macro} {
67 global gdb_prompt
6827a8f8
JB
68
69 set filepat {macscp[0-9]+\.[ch]}
70 set definition {}
71 set location {}
72
484086b7
JK
73 # Line number zero is set for macros defined from the compiler command-line.
74 # Such macros are not being tested by this function.
75 set nonzero {[1-9][0-9]*}
76
6827a8f8
JB
77 send_gdb "info macro ${macro}\n"
78
79 set debug_me 0
80
81 if {$debug_me} {exp_internal 1}
82 gdb_expect {
484086b7 83 -re "Defined at \[^\r\n\]*(${filepat}):${nonzero}\[\r\n\]" {
6827a8f8
JB
84 # `location' and `definition' should be empty when we see
85 # this message.
86 if {[llength $location] == 0 && [llength $definition] == 0} {
87 set location $expect_out(1,string)
88 exp_continue
89 } else {
90 # Exit this expect loop, with a result indicating failure.
91 set definition {}
92 }
93 }
94 -re "The symbol `${macro}' has no definition as a C/C\\+\\+ preprocessor macro\[^\r\n\]*\[\r\n\]" {
95 # `location' and `definition' should be empty when we see
96 # this message.
97 if {[llength $location] == 0 && [llength $definition] == 0} {
98 set definition undefined
99 exp_continue
100 } else {
101 # Exit this expect loop, with a result indicating failure.
102 set definition {}
103 }
104 }
484086b7 105 -re "^\[\r\n\]* included at \[^\r\n\]*(${filepat}):${nonzero}\[\r\n\]" {
6827a8f8
JB
106 # `location' should *not* be empty when we see this
107 # message. It should have recorded at least the initial
108 # `Defined at ' message (for definitions) or ` at' message
109 # (for undefined symbols).
110 if {[llength $location] != 0} {
111 lappend location $expect_out(1,string)
112 exp_continue
113 } else {
114 # Exit this expect loop, with a result indicating failure.
115 set definition {}
116 }
117 }
484086b7 118 -re "^\[\r\n\]*at \[^\r\n\]*(${filepat}):${nonzero}\[\r\n\]" {
6827a8f8
JB
119 # This appears after a `has no definition' message.
120 # `location' should be empty when we see it.
121 if {[string compare $definition undefined] == 0 \
122 && [llength $location] == 0} {
123 set location $expect_out(1,string)
124 exp_continue
125 } else {
126 # Exit this expect loop, with a result indicating failure.
127 set definition {}
128 }
129 }
130 -re "#define ${macro} (\[^\r\n\]*)\[\r\n\]" {
131 # `definition' should be empty when we see this message.
132 if {[string compare $definition ""] == 0} {
133 set definition $expect_out(1,string)
134 exp_continue
135 } else {
136 # Exit this expect loop, with a result indicating failure.
137 set definition {}
138 }
139 }
140 -re "has no preprocessor macro information.*$gdb_prompt $" {
141 set definition no-macro-info
142 }
143 -re "$gdb_prompt $" {
144 # Exit the expect loop; let the existing value of `definition'
145 # indicate failure or success.
146 }
147 timeout {
148 set definition timeout
149 }
150 }
151 if {$debug_me} {exp_internal 0}
152
153 switch -exact -- $definition {
154 no-macro-info { return no-macro-info }
155 timeout { return timeout }
f2292c65 156 undefined { return undefined }
6827a8f8
JB
157 default {
158 if {[llength $location] >= 1} {
159 return [concat $location [list $definition]]
160 } else {
161 return {}
162 }
163 }
164 }
165}
166
167
168# Call info_macro to show the definition of MACRO. Expect a result of
169# EXPECTED. Use WHERE in pass/fail messages to identify the context.
170# Return non-zero if we should abort the entire test file, or zero if
171# we can continue.
172proc check_macro {macro expected where} {
173 set func_def [info_macro $macro]
174 if {[string compare $func_def $expected] == 0} {
175 pass "info macro $macro $where"
176 } else {
177 switch -exact -- $func_def {
178 no-macro-info {
179 xfail "executable includes no macro debugging information"
180 return 1
181 }
f2292c65
PM
182 undefined {
183 fail "info macro $macro $where (undefined)"
184 return 1
185 }
6827a8f8
JB
186 timeout {
187 fail "info macro $macro $where (timeout)"
188 }
189 default {
190 fail "info macro $macro $where"
191 }
192 }
193 }
194 return 0
195}
44aabfbc 196
6827a8f8
JB
197
198# List the function FUNC, and then show the definition of MACRO,
199# expecting the result EXPECTED.
200proc list_and_check_macro {func macro expected} {
44aabfbc 201 gdb_test "list $func" ".*${func}.*" "list $func for $macro"
6827a8f8
JB
202 return [check_macro $macro $expected "after `list $func'"]
203}
204
b67c692f
DJ
205gdb_test "list main" ".*main.*" "list main for support check"
206set macro_support "unknown"
207gdb_test_multiple "info source" "Test macro information" {
208 -re "Includes preprocessor macro info\..*$gdb_prompt $" {
209 set macro_support 1
210 verbose "Source has macro information"
211 }
212 -re "Does not include preprocessor macro info\..*$gdb_prompt $" {
213 set macro_support 0
214 verbose "Source has no macro information"
f2292c65 215 }
b67c692f
DJ
216 default {
217 warning "couldn't check macro support (no valid response)."
f2292c65 218 }
6827a8f8 219}
b67c692f
DJ
220if {$macro_support == 0} {
221 unsupported "Skipping test because debug information does not include macro information."
222 return 0
223}
f2292c65 224
b67c692f 225list_and_check_macro main WHERE {macscp1.c {before macscp1_3}}
6827a8f8
JB
226list_and_check_macro macscp2_2 WHERE {macscp2.h macscp1.c {before macscp2_2}}
227list_and_check_macro macscp3_2 WHERE {macscp3.h macscp1.c {before macscp3_2}}
228
229
484086b7
JK
230# Assuming the current position inside program by `list' from above.
231gdb_test "info macro FROM_COMMANDLINE" \
232 "Defined at \[^\r\n\]*:0\r\n-DFROM_COMMANDLINE=ARG"
233
234
6827a8f8
JB
235# Although GDB's macro table structures distinguish between multiple
236# #inclusions of the same file, GDB's other structures don't. So the
237# `list' command here doesn't reliably select one #inclusion or the
238# other, even though it could. It would be nice to eventually change
239# GDB's structures to handle this correctly.
240gdb_test "list macscp4_2_from_macscp2" ".*macscp4_2_, MACSCP4_INCLUSION.*"
241switch -exact -- [info_macro WHERE] {
242 {macscp4.h macscp2.h macscp1.c {before macscp4_2_..., from macscp2.h}} {
243 pass "info macro WHERE after `list macscp_4_2_from_macscp2'"
244 }
245 {macscp4.h macscp3.h macscp1.c {before macscp4_2_..., from macscp3.h}} {
bbc8b958 246 setup_kfail"gdb/555" *-*-*
6827a8f8
JB
247 fail "info macro WHERE after `list macscp_4_2_from_macscp2' (gdb/555)"
248 }
249 timeout {
250 fail "info macro WHERE after `list macscp_4_2_from_macscp2' (timeout)"
251 }
252 default { fail "info macro WHERE after `list macscp_4_2_from_macscp2'" }
253}
254
255gdb_test "list macscp4_2_from_macscp3" ".*macscp4_2_, MACSCP4_INCLUSION.*"
256switch -exact -- [info_macro WHERE] {
257 {macscp4.h macscp3.h macscp1.c {before macscp4_2_..., from macscp3.h}} {
258 pass "info macro WHERE after `list macscp_4_2_from_macscp3'"
259 }
260 {macscp4.h macscp2.h macscp1.c {before macscp4_2_..., from macscp2.h}} {
bbc8b958 261 setup_kfail"gdb/555" *-*-*
6827a8f8
JB
262 fail "info macro WHERE after `list macscp_4_2_from_macscp3' (gdb/555)"
263 }
264 timeout {
265 fail "info macro WHERE after `list macscp_4_2_from_macscp3' (timeout)"
266 }
267 default { fail "info macro WHERE after `list macscp_4_2_from_macscp3'" }
268}
269
270
271#### Test the selection of the macro scope by the current frame.
272
273### A table of functions, in the order they will be reached, which is
274### also the order they appear in the preprocessed output. Each entry
275### has the form {FUNCNAME WHERE KFAILWHERE}, where:
276### - FUNCNAME is the name of the function,
277### - WHERE is the definition we expect to see for the macro `WHERE', as
278### returned by `info_macro', and
279### - KFAILWHERE is an alternate definition which should be reported
280### as a `known failure', due to GDB's inability to distinguish multiple
281### #inclusions of the same file.
282### KFAILWHERE may be omitted.
283
284set funcs {
285 {
286 macscp1_1
287 {macscp1.c {before macscp1_1}}
288 }
289 {
290 macscp2_1
291 {macscp2.h macscp1.c {before macscp2_1}}
292 }
293 {
294 macscp4_1_from_macscp2
295 {macscp4.h macscp2.h macscp1.c {before macscp4_1_..., from macscp2.h}}
296 {macscp4.h macscp3.h macscp1.c {before macscp4_1_..., from macscp3.h}}
297 }
298 {
299 macscp4_2_from_macscp2
300 {macscp4.h macscp2.h macscp1.c {before macscp4_2_..., from macscp2.h}}
301 {macscp4.h macscp3.h macscp1.c {before macscp4_2_..., from macscp3.h}}
302 }
303 {
304 macscp2_2
305 {macscp2.h macscp1.c {before macscp2_2}}
306 }
307 {
308 macscp1_2
309 {macscp1.c {before macscp1_2}}
310 }
311 {
312 macscp3_1
313 {macscp3.h macscp1.c {before macscp3_1}}
314 }
315 {
316 macscp4_1_from_macscp3
317 {macscp4.h macscp3.h macscp1.c {before macscp4_1_..., from macscp3.h}}
318 {macscp4.h macscp2.h macscp1.c {before macscp4_1_..., from macscp2.h}}
319 }
320 {
321 macscp4_2_from_macscp3
322 {macscp4.h macscp3.h macscp1.c {before macscp4_2_..., from macscp3.h}}
323 {macscp4.h macscp2.h macscp1.c {before macscp4_2_..., from macscp2.h}}
324 }
325 {
326 macscp3_2
327 {macscp3.h macscp1.c {before macscp3_2}}
328 }
329 {
330 macscp1_3
331 {macscp1.c {before macscp1_3}}
332 }
333}
334
d848e687
DJ
335proc maybe_kfail { func test_name } {
336 # We can't get the right scope info when we're stopped in
337 # the macro4_ functions.
338 if {[string match macscp4_* $func]} {
339 kfail gdb/555 "$test_name"
340 } else {
341 fail "$test_name"
342 }
343}
6827a8f8
JB
344
345# Start the program running.
346if {! [runto_main]} {
347 fail "macro tests suppressed: couldn't run to main"
348 return 0
349}
350
351# Set a breakpoint on each of the functions.
352foreach func_entry $funcs {
353 set func [lindex $func_entry 0]
354 gdb_test "break $func" "Breakpoint.*"
355}
356
357# Run to each of the breakpoints and check the definition (or lack
358# thereof) of each macro.
359for {set i 0} {$i < [llength $funcs]} {incr i} {
360 set func_entry [lindex $funcs $i]
361 set func [lindex $func_entry 0]
362 set expected [lindex $func_entry 1]
363 set kfail_expected [lindex $func_entry 2]
364
365 # Run to the breakpoint for $func.
366 gdb_test "continue" "Breakpoint $decimal, $func .*" "continue to $func"
367
368 # Check the macro WHERE.
369 set result [info_macro WHERE]
370 if {[string compare $result $expected] == 0} {
371 pass "info macro WHERE stopped in $func"
372 } elseif {[string compare $result $kfail_expected] == 0} {
bbc8b958 373 setup_kfail"gdb/555" *-*-*
6827a8f8
JB
374 fail "info macro WHERE stopped in $func (gdb/555)"
375 } elseif {[string compare $result timeout] == 0} {
376 fail "info macro WHERE stopped in $func (timeout)"
377 } else {
378 fail "info macro WHERE stopped in $func"
379 }
380
381 # Check that the BEFORE_<func> macros for all prior functions are
382 # #defined, and that those for all subsequent functions are not.
383 for {set j 0} {$j < [llength $funcs]} {incr j} {
384 if {$j != $i} {
385 set func_j_entry [lindex $funcs $j]
386 set func_j [lindex $func_j_entry 0]
387
388 set before_macro "BEFORE_[string toupper $func_j]"
389 set test_name \
390 "$before_macro defined/undefined when stopped at $func"
391 set result [info_macro $before_macro]
392
6827a8f8
JB
393 if {$j < $i} {
394 if {[llength $result] >= 2 && \
395 [string compare [lindex $result end] {}] == 0} {
396 pass $test_name
397 } elseif {[string compare $result timeout] == 0} {
398 fail "$test_name (timeout)"
399 } else {
d848e687 400 maybe_kfail $func "$test_name"
6827a8f8
JB
401 }
402 } elseif {$j > $i} {
403 switch -- [lindex $result end] {
404 undefined { pass $test_name }
405 timeout { fail "$test_name (timeout)" }
406 default {
d848e687 407 maybe_kfail $func "$test_name"
6827a8f8
JB
408 }
409 }
410 }
411
412 set until_macro "UNTIL_[string toupper $func_j]"
413 set test_name \
414 "$until_macro defined/undefined when stopped at $func"
415 set result [info_macro $until_macro]
416
6827a8f8
JB
417 if {$j <= $i} {
418 switch -- [lindex $result end] {
419 undefined { pass $test_name }
420 timeout { fail "$test_name (timeout)" }
421 default {
d848e687 422 maybe_kfail $func "$test_name"
6827a8f8
JB
423 }
424 }
425 } elseif {$j > $i} {
426 if {[llength $result] >= 2 && \
427 [string compare [lindex $result end] {}] == 0} {
428 pass $test_name
429 } elseif {[string compare $result timeout] == 0} {
430 fail "$test_name (timeout)"
431 } else {
d848e687 432 maybe_kfail $func "$test_name"
6827a8f8
JB
433 }
434 }
435 }
436 }
437}
d705c43c
PA
438
439gdb_test "break [gdb_get_line_number "set breakpoint here"]" \
440 "Breakpoint.*at.* file .*, line.*" \
441 "breakpoint macscp_expr"
442
443gdb_test "continue" "foo = 0;.*" "continue to macsp_expr"
444
7c8adf68
TT
445gdb_test "print address.addr" \
446 " = 0" \
447 "print address.addr"
448
506800a9
TT
449gdb_test "print MACRO_TO_EXPAND" \
450 "No symbol \"MACRO_TO_EXPAND\" in current context\." \
d705c43c
PA
451 "print expression with macro before define."
452
44aabfbc 453gdb_test "next" "foo = 1;" "next to definition 1"
d705c43c 454
506800a9 455gdb_test "print MACRO_TO_EXPAND" \
d705c43c
PA
456 " = 0" \
457 "print expression with macro in scope."
458
506800a9 459gdb_test "macro define MACRO_TO_EXPAND 72" \
d7d9f01e
TT
460 "" \
461 "user macro override"
462
506800a9 463gdb_test "print MACRO_TO_EXPAND" \
d7d9f01e
TT
464 " = 72" \
465 "choose user macro"
466
506800a9 467gdb_test "macro undef MACRO_TO_EXPAND" \
d7d9f01e
TT
468 "" \
469 "remove user override"
470
506800a9 471gdb_test "print MACRO_TO_EXPAND" \
d7d9f01e
TT
472 " = 0" \
473 "print expression with macro after removing override"
474
44aabfbc 475gdb_test "next" "foo = 2;" "next to definition 2"
d705c43c 476
506800a9
TT
477gdb_test "print MACRO_TO_EXPAND" \
478 "No symbol \"MACRO_TO_EXPAND\" in current context\." \
d705c43c 479 "print expression with macro after undef."
d7d9f01e 480
506800a9 481gdb_test "macro define MACRO_TO_EXPAND 5" \
d7d9f01e
TT
482 "" \
483 "basic macro define"
484
506800a9 485gdb_test "print MACRO_TO_EXPAND" \
d7d9f01e
TT
486 " = 5" \
487 "expansion of defined macro"
488
489gdb_test "macro list" \
506800a9 490 "macro define MACRO_TO_EXPAND 5" \
d7d9f01e
TT
491 "basic macro list"
492
506800a9 493gdb_test "macro define MACRO_TO_EXPAND(x) x" \
d7d9f01e
TT
494 "" \
495 "basic redefine, macro with args"
496
506800a9 497gdb_test "print MACRO_TO_EXPAND (7)" \
d7d9f01e
TT
498 " = 7" \
499 "expansion of macro with arguments"
500
506800a9 501gdb_test "macro undef MACRO_TO_EXPAND" \
d7d9f01e
TT
502 "" \
503 "basic macro undef"
504
506800a9
TT
505gdb_test "print MACRO_TO_EXPAND" \
506 "No symbol \"MACRO_TO_EXPAND\" in current context\." \
d7d9f01e 507 "print expression with macro after user undef."
ccb3ac8a 508
886a217c
TT
509# Regression test; this used to crash.
510gdb_test "macro define" \
511 "usage: macro define.*" \
512 "macro define with no arguments"
513
514# Regression test; this used to crash.
515gdb_test "macro undef" \
516 "usage: macro undef.*" \
517 "macro undef with no arguments"
518
9a044a89
TT
519# Completion tests.
520
521# The macro FIFTY_SEVEN is in scope at this point.
522send_gdb "p FIFTY_\t"
523gdb_expect {
524 -re "^p FIFTY_SEVEN $"\
525 { send_gdb "\n"
526 gdb_expect {
527 -re "^.* = 57.*$gdb_prompt $"\
528 { pass "complete 'p FIFTY_SEVEN'"}
529 -re ".*$gdb_prompt $" { fail "complete 'p FIFTY_SEVEN'"}
530 timeout {fail "(timeout) complete 'p FIFTY_SEVEN'"}
531 }
532 }
533 -re ".*$gdb_prompt $" { fail "complete 'p FIFTY_SEVEN'" }
534 timeout { fail "(timeout) complete 'p FIFTY_SEVEN' 2" }
535 }
536
537# The macro TWENTY_THREE is not in scope.
538send_gdb "p TWENTY_\t"
539gdb_expect {
540 -re "^p TWENTY_\\\x07$"\
541 { send_gdb "\n"
542 gdb_expect {
543 -re "No symbol \"TWENTY_\" in current context\\..*$gdb_prompt $"\
544 { pass "complete 'p TWENTY_'"}
545 -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_'"}
546 timeout {fail "(timeout) complete 'p TWENTY_'"}
547 }
548 }
549 -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_'" }
550 timeout { fail "(timeout) complete 'p TWENTY_' 2" }
551 }
552
553# The macro FORTY_EIGHT was undefined and thus is not in scope.
554send_gdb "p FORTY_\t"
555gdb_expect {
556 -re "^p FORTY_\\\x07$"\
557 { send_gdb "\n"
558 gdb_expect {
559 -re "No symbol \"FORTY_\" in current context\\..*$gdb_prompt $"\
560 { pass "complete 'p FORTY_'"}
561 -re ".*$gdb_prompt $" { fail "complete 'p FORTY_'"}
562 timeout {fail "(timeout) complete 'p FORTY_'"}
563 }
564 }
565 -re ".*$gdb_prompt $" { fail "complete 'p FORTY_'" }
566 timeout { fail "(timeout) complete 'p FORTY_' 2" }
567 }
568
569gdb_test "macro define TWENTY_THREE 25" \
570 "" \
571 "defining TWENTY_THREE"
572
573# User-defined macros are always in scope.
574send_gdb "p TWENTY_\t"
575gdb_expect {
576 -re "^p TWENTY_THREE $"\
577 { send_gdb "\n"
578 gdb_expect {
579 -re "^.* = 25.*$gdb_prompt $"\
580 { pass "complete 'p TWENTY_THREE'"}
581 -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_THREE'"}
582 timeout {fail "(timeout) complete 'p TWENTY_THREE'"}
583 }
584 }
585 -re ".*$gdb_prompt $" { fail "complete 'p TWENTY_THREE'" }
586 timeout { fail "(timeout) complete 'p TWENTY_THREE' 2" }
587 }
588
2fae03e8
TT
589# Splicing tests.
590
ccb3ac8a 591gdb_test "macro expand SPLICE(x, y)" \
2fae03e8
TT
592 "expands to: xy" \
593 "basic macro splicing"
594
595gdb_test "macro define robotinvasion 2010" \
596 "" \
597 "define splice helper"
598
599gdb_test "macro expand SPLICE(robot, invasion)" \
600 "expands to: *2010" \
601 "splicing plus expansion"
602
603# Varargs tests.
604
dcb1a1e2 605gdb_test "macro define va_c99(...) varfunc (fixedarg, __VA_ARGS__)" \
2fae03e8
TT
606 "" \
607 "define first varargs helper"
608
dcb1a1e2 609gdb_test "macro define va2_c99(x, y, ...) varfunc (fixedarg, x, y, __VA_ARGS__)" \
2fae03e8
TT
610 "" \
611 "define second varargs helper"
612
dcb1a1e2 613gdb_test "macro define va_gnu(args...) varfunc (fixedarg, args)" \
2fae03e8
TT
614 "" \
615 "define third varargs helper"
616
dcb1a1e2 617gdb_test "macro define va2_gnu(args...) varfunc (fixedarg, ## args)" \
2fae03e8
TT
618 "" \
619 "define fourth varargs helper"
620
621gdb_test "macro expand va_c99(one, two, three)" \
dcb1a1e2 622 "expands to: *varfunc \\(fixedarg, *one, two, three\\)" \
2fae03e8
TT
623 "c99 varargs expansion"
624
625gdb_test "macro expand va_c99()" \
dcb1a1e2 626 "expands to: *varfunc \\(fixedarg, *\\)" \
2fae03e8
TT
627 "c99 varargs expansion without an argument"
628
629gdb_test "macro expand va2_c99(one, two, three, four)" \
dcb1a1e2 630 "expands to: *varfunc \\(fixedarg, *one, two, three, four\\)" \
2fae03e8
TT
631 "c99 varargs expansion, multiple formal arguments"
632
633gdb_test "macro expand va_gnu(one, two, three, four)" \
dcb1a1e2 634 "expands to: *varfunc \\(fixedarg, *one, two, three, four\\)" \
2fae03e8
TT
635 "gnu varargs expansion"
636
637gdb_test "macro expand va_gnu()" \
dcb1a1e2 638 "expands to: *varfunc \\(fixedarg, *\\)" \
2fae03e8
TT
639 "gnu varargs expansion without an argument"
640
641gdb_test "macro expand va2_gnu()" \
dcb1a1e2 642 "expands to: *varfunc \\(fixedarg\\)" \
2fae03e8
TT
643 "gnu varargs expansion special splicing without an argument"
644
645# Stringification tests.
646
647gdb_test "macro define str(x) #x" \
648 "" \
649 "define stringification macro"
650
651gdb_test "macro define maude 5" \
652 "" \
653 "define first stringification helper"
654
655gdb_test "macro define xstr(x) str(x)" \
656 "" \
657 "define second stringification helper"
658
659gdb_test "print str(5)" \
660 " = \"5\"" \
661 "simple stringify"
662
663gdb_test "print str(hi bob)" \
664 " = \"hi bob\"" \
665 "stringify with one space"
666
667gdb_test "print str( hi bob )" \
668 " = \"hi bob\"" \
669 "stringify with many spaces"
670
671gdb_test "print str(hi \"bob\")" \
672 " = \"hi \\\\\"bob\\\\\"\"" \
673 "stringify with quotes"
674
675gdb_test "print str(hi \\bob\\)" \
676 " = \"hi \\\\\\\\bob\\\\\\\\\"" \
677 "stringify with backslashes"
678
679gdb_test "print str(maude)" \
680 " = \"maude\"" \
681 "stringify without substitution"
682
683gdb_test "print xstr(maude)" \
684 " = \"5\"" \
685 "stringify with substitution"
17c8aaf5
TT
686
687# Regression test for pp-number bug.
688gdb_test "macro define si_addr fields.fault.si_addr" \
689 "" \
690 "define si_addr macro"
691gdb_test "macro expand siginfo.si_addr" \
692 "expands to: siginfo.fields.fault.si_addr" \
693 "macro expand siginfo.si_addr"
This page took 0.796367 seconds and 4 git commands to generate.