# Copyright 2012 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"

set testdir "bad-task-bp-keyword"
set testfile "${testdir}/foo"
set srcfile ${srcdir}/${subdir}/${testfile}.adb
set binfile ${objdir}/${subdir}/${testfile}

file mkdir ${objdir}/${subdir}/${testdir}
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
  return -1
}

clean_restart ${testfile}

# Star the program in order to have some tasks running...
set bp_location [gdb_get_line_number "STOP_HERE" ${testdir}/foo.adb]
runto "foo.adb:$bp_location"

# Try inserting a breakpoint on task 2, but using the wrong capitalization
# on the 'task' keyword ("TASK" instead of "task").  The debugger should
# report an error.  Try various weird combinations too.

gdb_test "break *break_me'address TASK 2" \
         "Garbage 'TASK 2' at end of command"

set test "break *break_me'address TASK Task TaSK 2"
gdb_test_multiple "$test" $test {
    -re "Garbage 'TASK Task TaSK 2' at end of command\[\r\n\]+$gdb_prompt $" {
        pass $test
        }
    -re "Garbage 'TaSK 2' at end of command\[\r\n\]+$gdb_prompt $" {
        kfail gdb/14111 "$test"
        }
}

gdb_test "break *break_me'address TASK if" \
         "Garbage 'TASK if' at end of command"
