# Copyright 2010-2021 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 {
    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 {
    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 {
    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"
