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

require allow_fortran_tests

standard_testfile ".f90"
load_lib fortran.exp

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

if {![runto [gdb_get_line_number "First Breakpoint"]]} {
    perror "couldn't run to breakpoint First Breakpoint"
    return -1
}

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

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

gdb_breakpoint [gdb_get_line_number "Second Breakpoint"]
gdb_breakpoint [gdb_get_line_number "Final 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"
