# Copyright 2014-2021 Free Software Foundation, Inc.

# Contributed by Intel Corp. <keven.boell@intel.com>
#
# 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/>.

# Verify that, using the MI, we can evaluate a simple C Variable Length
# Array (VLA).

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

gdb_exit
if [mi_gdb_start] {
    continue
}

standard_testfile vla.c

if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" \
                  "${binfile}" executable {debug}] != "" } {
     untested "failed to compile"
     return -1
}

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

set bp_lineno [gdb_get_line_number "vla-filled"]

mi_create_breakpoint "-t vla.c:$bp_lineno" \
    "insert breakpoint at line $bp_lineno after vla is filled" \
    -function func -line $bp_lineno -file ".*vla.c" -disp del

mi_run_cmd
mi_expect_stop "breakpoint-hit" "func" "\{name=\"n\",value=\"5\"\}" \
               ".*vla.c" "$bp_lineno" { "" "disp=\"del\"" } \
               "run to breakpoint at line $bp_lineno"

mi_gdb_test "500-data-evaluate-expression vla" \
    "500\\^done,value=\"\\{0, 1, 2, 3, 4\\}\"" "evaluate complete vla"

mi_gdb_test "501-data-evaluate-expression vla\[0\]" \
    "501\\^done,value=\"0\"" "evaluate vla\[0\]"

mi_gdb_test "502-data-evaluate-expression vla\[2\]" \
    "502\\^done,value=\"2\"" "evaluate vla\[2\]"

mi_gdb_test "503-data-evaluate-expression vla\[4\]" \
    "503\\^done,value=\"4\"" "evaluate vla\[4\]"

mi_create_varobj_checked vla vla "int \\\[5\\\]" \
                                 "create local variable vla"

mi_gdb_test "504-var-info-type vla" \
    "504\\^done,type=\"int \\\[5\\\]\"" \
    "info type variable vla"

mi_gdb_test "505-var-show-format vla" \
    "505\\^done,format=\"natural\"" \
    "show format variable vla"

mi_gdb_test "506-var-evaluate-expression vla" \
    "506\\^done,value=\"\\\[5\\\]\"" \
    "eval variable vla"

mi_list_array_varobj_children "vla" "5" "int" \
    "get children of vla"

mi_gdb_exit
return 0
