This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] Fix problem with scope.exp test, skipping past init0 call
- From: Fred Fish <fnf at specifix dot com>
- To: gdb-patches at sourceware dot org
- Cc: fnf at specifix dot com
- Date: Sun, 12 Feb 2006 15:10:01 -0500
- Subject: [PATCH] Fix problem with scope.exp test, skipping past init0 call
- Reply-to: fnf at specifix dot com
I noticed the following failures while running the gdb testsuite and
decided to investigate:
Running /src/latest/trunk/src/gdb/gdb/testsuite/gdb.base/scope.exp ...
FAIL: gdb.base/scope.exp: next over init0() in main
FAIL: gdb.base/scope.exp: print filelocal_bss
FAIL: gdb.base/scope.exp: print 'scope0.c'::filelocal_bss in test_at_main
FAIL: gdb.base/scope.exp: print 'scope1.c'::filelocal_bss
The problem was triggered by the fact that the breakpoint on main was
being set at the opening brace and then the first next only took us to
the init0 call. This might be a bug in it's own right, but scope.exp
is supposed to handle this as a side effect of an attempt to skip
__main:
# skip past init. There may be a call to __main at the start of
# main, so the first next may only get us to the init0 call.
if [gdb_test "next" "$decimal.*foo \\(\\);" "next over init0() in main" "$decimal.*init0 \\(\\);" "next"] {
gdb_suppress_tests ;
}
However, it appears that you can only using the additional "QUESTION
RESPONSE" args to gdb_test for true questions (that don't end in a
newline) and not for the way attempted here. The following patch
fixes the problem.
2006-02-12 Fred Fish <fnf@specifix.com>
* gdb.base/scope.exp (test_at_main): Use gdb_test_multiple
to handle cases where it takes two "next" commands to skip
past the init call.
Index: scope.exp
===================================================================
RCS file: /cvsroots/latest/src/gdb/gdb/testsuite/gdb.base/scope.exp,v
retrieving revision 1.1.1.1
diff -c -p -r1.1.1.1 scope.exp
*** scope.exp 8 Oct 2005 19:36:19 -0000 1.1.1.1
--- scope.exp 12 Feb 2006 20:04:37 -0000
*************** proc test_at_main {} {
*** 63,70 ****
# skip past init. There may be a call to __main at the start of
# main, so the first next may only get us to the init0 call.
! if [gdb_test "next" "$decimal.*foo \\(\\);" "next over init0() in main" "$decimal.*init0 \\(\\);" "next"] {
! gdb_suppress_tests ;
}
--- 63,80 ----
# skip past init. There may be a call to __main at the start of
# main, so the first next may only get us to the init0 call.
! gdb_test_multiple "next" "next over init0() in main" {
! -re "$decimal.*foo \\(\\).*$gdb_prompt $" {
! pass "next over init0() in main"
! }
! -re "$decimal.*init0 \\(\\).*$gdb_prompt $" {
! send_gdb "next\n"
! exp_continue
! }
! -re ".*$gdb_prompt $" {
! fail "next over init0() in main"
! gdb_suppress_tests
! }
}