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

standard_testfile "vla.f90"

if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile} \
    {debug f90 quiet}] } {
    return -1
}

if ![runto_main] {
    untested "could not run to main"
    return -1
}

# Set some breakpoints and print complete vla.
gdb_breakpoint [gdb_get_line_number "vla1-init"]
gdb_continue_to_breakpoint "vla1-init"
gdb_test "print vla1" " = <not allocated>" "print non-allocated vla1"

gdb_breakpoint [gdb_get_line_number "vla1-filled"]
gdb_continue_to_breakpoint "vla1-filled"
with_timeout_factor 2 {
    gdb_test "print vla1" \
      " = \\( *\\( *\\( *1311, *1311, *1311,\[()1311, .\]*\\)" \
      "print vla1 filled"
}

# Try to access history values for full vla prints.
gdb_test "print \$1" " = <not allocated>" "print \$1"
with_timeout_factor 2 {
    gdb_test "print \$2" \
      " = \\( *\\( *\\( *1311, *1311, *1311,\[()1311, .\]*\\)" "print \$4"
}

gdb_breakpoint [gdb_get_line_number "vla2-filled"]
gdb_continue_to_breakpoint "vla2-filled"
gdb_test "print vla2(1,43,20)" " = 1311" "print vla2(1,43,20)"
gdb_test "print vla1(1,3,8)" " = 1001" "print vla2(1,3,8)"

# Try to access history values for vla values.
gdb_test "print \$5" " = 1311" "print \$5"
gdb_test "print \$6" " = 1001" "print \$6"
