#   Copyright (C) 2004 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# Test that the "watch -location" and "-break-watch -l" commands work properly
#
# Written by Jim Ingham <jingham@apple.com>
# 

load_lib mi-support.exp
set MIFLAGS "-i=mi1"

gdb_exit
if [mi_gdb_start] {
    continue
}

set testfile "watch-location"
set srcfile ${testfile}.c

set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "$srcdir/$subdir/$srcfile" "${binfile}" executable {debug}] != "" } {
    gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

mi_delete_breakpoints
mi_gdb_reinitialize_dir $srcdir/$subdir
mi_gdb_load ${binfile}

mi_run_to_main

set after_malloc 20
set first_set_line 21
set second_set_line 34

mi_gdb_test "200-break-insert $srcfile:$after_malloc" \
    "200\\^done,bkpt=\{number=\"2\",type=\"breakpoint\",disp=\"keep\",enabled=\"y\",addr=\"$hex\",func=\"make_outer\",file=\".*$srcfile\",line=\"$after_malloc\",.*times=\"0\"\}" \
             "break-insert operation"
mi_continue_to 2 make_outer ".*" ".*$srcfile" $after_malloc "Continued to after ret_val is malloc'ed"
mi_gdb_test "210-break-watch -l ret_val->inner.inner1" \
    "210\\^done,wpt=\{number=\"3\",exp=\"\\*\\\(int \\*\\\) \[0-9\]+\"\}" \
    "Successfully set watchpoint"
mi_continue_to_watchpoint make_outer ".*" ".*$srcfile" $first_set_line 3 ".*" 0 1 "Hit first watchpoint"
mi_continue_to_watchpoint main ".*" ".*$srcfile" $second_set_line 3 ".*" 1 10 "Hit second watchpoint"

mi_gdb_exit
return 0
