# Copyright 2003-2020 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 3 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, see <http://www.gnu.org/licenses/>.  */

# advance.exp -- Expect script to test 'advance' in gdb

standard_testfile

if {[prepare_for_testing "failed to prepare" $testfile $srcfile debug]} {
    return -1
}

if ![runto_main] then {
    fail "can't run to main"
    return 0
}

# Verify that "advance <location>" works.  (This is really just syntactic
# sugar for "tbreak <location>; continue".)
#
gdb_test "advance [gdb_get_line_number "advance this location"]" \
	"main .* at .*:.*b = 3.*advance this location.*" \
	"advance line number"

# Verify that a malformed "advance" is gracefully caught.
#
gdb_test "advance [gdb_get_line_number "advance malformed"] then stop" \
    "malformed linespec error: unexpected string, \"then stop\"" \
    "malformed advance"

# Verify that "advance <funcname>" works.
#
gdb_test "advance func" \
	"func.*at.*x = x \\+ 5."

# Verify that "advance <funcname>" when funcname is NOT called by the current
# frame, stops at the end of the current frame.
#
# gdb can legitimately stop on either the current line or the next line,
# depending on whether the machine instruction for 'call' on the current
# line has more instructions after it or not.
#
gdb_test "advance func3" \
	"(in main|).*(func \\(c\\)|marker1 \\(\\)).*stop here after leaving current frame..."\
	"advance function not called by current frame"

# break at main again
#
gdb_test "break [gdb_get_line_number "break here"]" \
	".*Breakpoint.* at .*" \
	"set breakpoint at call to func3"
gdb_test "continue" \
	".*Breakpoint ${decimal}, main.*func3.*break here.*" \
	"continue to call to func3 in main"

# Verify that "advance <funcname>" when funcname is called as parameter to 
# another function works.
#
gdb_test "advance foo" \
	"foo \\(a=5\\).*int b = a \\+ 10;"\
	"advance function called as param"

# Verify that we get an error if we use 'advance' w/o argument
#
gdb_test "advance" \
	"Argument required \\(a location\\)."\
	"advance with no argument"

