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

# Check that GDB does not do excess accesses to the inferior memory
# when fetching elements from an array in the C language.

standard_testfile

if {[prepare_for_testing "failed to prepare" $testfile $srcfile]} {
    return -1
}

if ![runto_main] then {
    return -1
}

# Load 'global_foo' into a history variable.
gdb_test "p global_foo" "\\{f = 1, array = \\{1, 2, 3, 4, 5\\}\\}"

gdb_test_no_output "set debug target 1"

# Now print an array element from within 'global_foo', but accessed
# via the history element.  The history element should be non-lazy,
# and so there should be no reason for GDB to fetch the array element
# from the inferior memory, we should be able to grab the contents
# directory from the history value.
#
# To check this we 'set debug target 1' (above), and then look for any
# xfer_partial calls; there shouldn't be any.
set saw_memory_access false
gdb_test_multiple "p \$.array\[1\]" "" {
    -re "^p \\\$\\.array\\\[1\\\]\r\n" {
	exp_continue
    }
    -re "^->\[^\r\n\]+xfer_partial\[^\r\n\]+\r\n" {
	set saw_memory_access true
	exp_continue
    }
    -re "^->\[^\r\n\]+\r\n" {
	exp_continue
    }
    -re "^<-\[^\r\n\]+\r\n" {
	exp_continue
    }
    -re "^\[^\$\]\[^\r\n\]+\r\n" {
	exp_continue
    }
    -re "^\\\$${decimal} = 2\r\n$gdb_prompt " {
	gdb_assert { ! $saw_memory_access }
    }
}

gdb_test "set debug target 0" ".*"

if { ! [skip_python_tests] } {
    gdb_test_no_output "python val = gdb.parse_and_eval('global_foo')"
    gdb_test "python print('val = %s' % val)" "val = \\{f = 1, array = \\{1, 2, 3, 4, 5\\}\\}"
    gdb_test "python print('val.is_lazy = %s' % val.is_lazy)" "val\\.is_lazy = False"

    # Grab an element from the array within VAL.  The element should
    # immediately be non-lazy as the value contents can be copied
    # directly from VAL.
    gdb_test_no_output "python elem = val\['array'\]\[1\]"
    gdb_test "python print('elem.is_lazy = %s' % elem.is_lazy)" "elem\\.is_lazy = False"
    gdb_test "python print('elem = %s' % elem)" "elem = 2"
}
