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

load_lib "ada.exp"

standard_ada_testfile foo

if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
  return -1
}

clean_restart ${testfile}

set ws "\[ \t\r\n\]+"

# Start the program in order to have some tasks running...
set bp_location [gdb_get_line_number "STOP_HERE" ${testdir}/foo.adb]
gdb_test "break foo.adb:$bp_location" \
    "Breakpoint $decimal.*" \

gdb_run_cmd
gdb_test "" "Breakpoint $decimal, foo \\(\\).*"
gdb_test "continue" \
         "Continuing\\..*Breakpoint $decimal, foo \\(\\).*"

# Make sure that "thread" may be used as a variable without being mistaken
# for an expression delimiter.
gdb_test "print thread" \
         "= 1" \
         "Print variable 'thread'"

gdb_test_no_output "delete 1"

gdb_test "watch thread" \
         ".*atchpoint \[0-9\]+: thread" \
         "Set plain watchpoint on variable 'thread'"

# Make sure that 'if' when followed by an expression beginning
# with 'i' works.
gdb_test "watch thread if i = 2" \
         ".*atchpoint \[0-9\]+: thread" \
         "Set conditional watchpoint."

gdb_test "info break" \
         ".*${ws}.*atchpoint${ws}keep${ws}y${ws}thread${ws}.*atchpoint${ws}keep${ws}y${ws}thread${ws}stop only if i = 2" \
         "Check that watchpoint is set correctly."

# Check for right error when using both 'if' and 'thread' clauses.

gdb_test "break foo.adb:$bp_location if thread = 10 thread 999" \
         ".*Unknown thread 999\\." \
         "Combination of 'if' and 'thread' delimiters."
