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

# Test invalid element and slice array accesses.

if {[skip_fortran_tests]} { return -1 }

standard_testfile ".f90"
load_lib fortran.exp

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

# Avoid shared lib symbols.
gdb_test_no_output "set auto-solib-add off"

if ![fortran_runto_main] {
    return -1
}

# Avoid libc symbols, in particular the 'array' type.
gdb_test_no_output "nosharedlibrary"

# gdb_breakpoint [gdb_get_line_number "Display Message Breakpoint"]
gdb_breakpoint [gdb_get_line_number "First Breakpoint"]
gdb_breakpoint [gdb_get_line_number "Second Breakpoint"]
gdb_breakpoint [gdb_get_line_number "Final Breakpoint"]

gdb_continue_to_breakpoint "First Breakpoint"

# Access not yet allocated array.
gdb_test "print other" " = <not allocated>"
gdb_test "print other(0:4,2:3)" "array not allocated"
gdb_test "print other(1,1)" "no such vector element \\(vector not allocated\\)"

# Access not yet associated pointer.
gdb_test "print pointer2d" " = <not associated>"
gdb_test "print pointer2d(1:2,1:2)" "array not associated"
gdb_test "print pointer2d(1,1)" "no such vector element \\(vector not associated\\)"

gdb_continue_to_breakpoint "Second Breakpoint"

# Accessing just outside the arrays.
foreach name {array pointer2d other} {
    gdb_test "print $name (0:,:)" "array subscript out of bounds"
    gdb_test "print $name (:11,:)" "array subscript out of bounds"
    gdb_test "print $name (:,0:)" "array subscript out of bounds"
    gdb_test "print $name (:,:11)" "array subscript out of bounds"

    gdb_test "print $name (0,:)" "no such vector element"
    gdb_test "print $name (11,:)" "no such vector element"
    gdb_test "print $name (:,0)" "no such vector element"
    gdb_test "print $name (:,11)" "no such vector element"
}

# Stride in the wrong direction.
gdb_test "print array (1:10:-1,:)" "incorrect stride and boundary combination"
gdb_test "print array (:,1:10:-1)" "incorrect stride and boundary combination"
gdb_test "print array (10:1:1,:)" "incorrect stride and boundary combination"
gdb_test "print array (:,10:1:1)" "incorrect stride and boundary combination"
