This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix problem with scope.exp test, skipping past init0 call


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
! 	}
      }
  
  


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]