# Copyright 2015-2020 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 "failed to prepare" ${testfile} ${srcfile} \
    {debug f90 quiet}] } {
    return -1
}

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

# Try to access values in non allocated VLA
gdb_breakpoint [gdb_get_line_number "vla1-init"]
gdb_continue_to_breakpoint "vla1-init"
gdb_test "print sizeof(vla1)" " = 0" "print sizeof non-allocated vla1"
gdb_test "print sizeof(vla1(3,2,1))" \
    "no such vector element \\(vector not allocated\\)" \
    "print sizeof non-allocated indexed vla1"
gdb_test "print sizeof(vla1(3:4,2,1))" "array not allocated" \
    "print sizeof non-allocated sliced vla1"

# Try to access value in allocated VLA
gdb_breakpoint [gdb_get_line_number "vla1-allocated"]
gdb_continue_to_breakpoint "vla1-allocated"
gdb_test "print sizeof(vla1)" " = 4000" "print sizeof allocated vla1"
gdb_test "print sizeof(vla1(3,2,1))" "4" \
    "print sizeof element from allocated vla1"
gdb_test "print sizeof(vla1(3:4,2,1))" "800" \
    "print sizeof sliced vla1"

# Try to access values in undefined pointer to VLA (dangling)
gdb_test "print sizeof(pvla)" " = 0" "print sizeof non-associated pvla"
gdb_test "print sizeof(pvla(3,2,1))" \
    "no such vector element \\(vector not associated\\)" \
    "print sizeof non-associated indexed pvla"
gdb_test "print sizeof(pvla(3:4,2,1))" "array not associated" \
    "print sizeof non-associated sliced pvla"

# Try to access values in pointer to VLA and compare them
gdb_breakpoint [gdb_get_line_number "pvla-associated"]
gdb_continue_to_breakpoint "pvla-associated"
gdb_test "print sizeof(pvla)" " = 4000" "print sizeof associated pvla"
gdb_test "print sizeof(pvla(3,2,1))" "4" \
    "print sizeof element from associated pvla"
gdb_test "print sizeof(pvla(3:4,2,1))" "800" "print sizeof sliced pvla"

gdb_breakpoint [gdb_get_line_number "vla1-neg-bounds-v1"]
gdb_continue_to_breakpoint "vla1-neg-bounds-v1"
gdb_test "print sizeof(vla1)" " = 96" \
    "print sizeof vla1 negative bounds"

gdb_breakpoint [gdb_get_line_number "vla1-neg-bounds-v2"]
gdb_continue_to_breakpoint "vla1-neg-bounds-v2"
gdb_test "print sizeof(vla1)" " = 640" \
    "print sizeof vla1 negative lower bounds, positive upper bounds"
