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

# Place a non-dynamic array into an internal variable, then show that
# modifications to either the internal variable, or to the original
# array are independent.

standard_testfile ".f90"
load_lib "fortran.exp"

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

if ![fortran_runto_main] {
    return -1
}

gdb_breakpoint [gdb_get_line_number "Break here"]
gdb_continue_to_breakpoint "Break here"

# Take a copy of the array into an internal variable.
gdb_test_no_output "set \$a=arr" "set \$a internal variable"

# Validate the original contents.
gdb_test "print arr" \
    " = \\(1, 1, 1, 1, 1, 1, 1, 1, 1, 1\\)" \
    "print arr contents"
gdb_test "print \$a" \
    " = \\(1, 1, 1, 1, 1, 1, 1, 1, 1, 1\\)" \
    "print \$a contents"

# Modify the original array in memory.
gdb_test_no_output "set arr(5) = 5"

# Modify the internal variable copy.
gdb_test_no_output "set \$a(3) = 3"

# Now check that the two values have been updated independently.
gdb_test "print arr" \
    " = \\(1, 1, 1, 1, 5, 1, 1, 1, 1, 1\\)" \
    "print arr contents after change"
gdb_test "print \$a" \
    " = \\(1, 1, 3, 1, 1, 1, 1, 1, 1, 1\\)" \
    "print \$a contents after change"
