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

#
# Tests involving watchpoint conditions with local expressions.
#

standard_testfile .c

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

# Disable hardware watchpoints if necessary.
if [target_info exists gdb,no_hardware_watchpoints] {
    gdb_test_no_output "set can-use-hw-watchpoints 0" ""
}

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

gdb_test "watch global if q > 10" \
    "atchpoint .*: global" \
    "set write watchpoint on global variable, local condition"

gdb_test "continue" \
    "Old value = 10.*New value = 11.*" \
    "watchpoint with global expression, local condition evaluates in correct frame"

clean_restart ${testfile}

# Disable hardware watchpoints if necessary.
if [target_info exists gdb,no_hardware_watchpoints] {
    gdb_test_no_output "set can-use-hw-watchpoints 0" ""
}

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

gdb_test "watch q if q > 10" \
    "atchpoint .*: q" \
    "set write watchpoint on local variable, local condition"

gdb_test "continue" \
    "Old value = 10.*New value = 11.*" \
    "watchpoint with local expression, local condition evaluates in correct frame"

clean_restart ${testfile}

# Disable hardware watchpoints if necessary.
if [target_info exists gdb,no_hardware_watchpoints] {
    gdb_test_no_output "set can-use-hw-watchpoints 0" ""
}

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

gdb_test "watch global2" \
    "atchpoint.*" \
    "set write watchpoint on global2 variable"

gdb_test "continue" \
    "Old value = 0.*New value = 1.*" \
    "watchpoint on global2 variable triggers"

gdb_test_no_output "condition 2 *foo > 10" \
    "condition of watchpoint 2 changes"

gdb_test "continue" \
    ".*condition cannot be tested in the current scope.*Old value = 1.*New value = 2.*" \
    "watchpoint stops with untestable local expression"
