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

if $tracelevel then {
    strace $tracelevel
}

load_lib "pascal.exp"

set testfile "gdb11492"
set srcfile ${testfile}.pas
set binfile ${objdir}/${subdir}/${testfile}$EXEEXT

if {[gdb_compile_pascal "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable [list debug ]] != "" } {
  return -1
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}
set bp_location1 [gdb_get_line_number "set breakpoint 1 here"]

if { [gdb_breakpoint ${srcfile}:${bp_location1}] } {
    pass "setting breakpoint 1"
}

# Verify that "start" lands inside the right procedure.
if { [gdb_start_cmd] < 0 } {
    untested start
    return -1
}

gdb_test "" ".* at .*${srcfile}.*" "start"
gdb_test "continue" ""

gdb_test "print integer_array" { = \{50, 51, 52, 53, 54, 55, 56, 57\}}
gdb_test "print /s integer_array" " = '23456789'" 

gdb_test "print char_array" " = '23456789'" 
gdb_test "print /d char_array" { = \{50, 51, 52, 53, 54, 55, 56, 57\}}
gdb_test "print /x char_array" { = \{0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39\}}
# Use next two times to avoid GPC line numbering problem
gdb_test "next" ""
gdb_test "next" ""
gdb_test "print char_array" " = '2345X789'"
gdb_exit

