# Copyright 2010-2013 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/>.

# Test for watchpoints with conditions that involve inferior function
# calls.

standard_testfile

if { [build_executable ${testfile}.exp ${testfile} ${testfile}.c {debug}] } {
    untested ${testfile}.exp
    return -1
}

proc test_watchpoint { hw } {
    global testfile

    clean_restart ${testfile}

    if { ![runto main] } then {
	fail "run to main"
	return
    }

    if { ! $hw } {
	gdb_test_no_output "set can-use-hw-watchpoints 0" ""
    }

    gdb_test "watch var if return_1 ()" "atchpoint .*: var"

    gdb_breakpoint [gdb_get_line_number "break-at-exit"]

    gdb_test "continue" \
	"atchpoint \[0-9\]+: var\r\n\r\nOld value = 0\r\nNew value = 1\r\n.*watchpoint-stop.*" \
	"continue"
}

if { ![target_info exists gdb,no_hardware_watchpoints] } {
    with_test_prefix "hw" { test_watchpoint 1 }
}

with_test_prefix "sw" { test_watchpoint 0 }
