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

standard_ada_testfile a

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

clean_restart ${testfile}

set bp_location [gdb_get_line_number "STOP" ${testdir}/a.adb]
if ![runto "a.adb:$bp_location" ] then {
  perror "Couldn't run ${testfile}"
  return
}

# Verify that assigning to Nnn (a basic string) works...

gdb_test "print nnn" \
         "= \"12345\"" \
         "print nnn before assignment"

gdb_test_no_output "set variable nnn := \"qcyom\""

gdb_test "print nnn" \
         "= \"qcyom\"" \
         "print nnn after assignment"

# Same with Www (a wide string)...

gdb_test "print www" \
         "= \"12345\"" \
         "print www before assignment"

gdb_test_no_output "set variable www := \"zenrk\""

gdb_test "print www" \
         "= \"zenrk\"" \
         "print www after assignment"

# Same with Rws (a wide wide string)...

gdb_test "print rws" \
         "= \"12345\"" \
         "print rws before assignment"

gdb_test_no_output "set variable rws := \"ndhci\""

gdb_test "print rws" \
         "= \"ndhci\"" \
         "print rws after assignment"

# Also, check that GDB doesn't get tricked if we assign to Www a
# string twice the length of Www.  The debugger should reject the
# assignment, because the array lengths are different (the debugger
# used to get tricked because the array size was the same).

gdb_test "set variable www := \"1#2#3#4#5#\"" \
         "cannot assign arrays of different length"
