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

load_lib "ada.exp"

if { [skip_ada_tests] } { return -1 }

standard_ada_testfile foo

# Note we don't test the "none" (no -fgnat-encodings option) scenario
# here, because "all" and "minimal" cover the cases, and this way we
# don't have to update the test when gnat changes its default.
foreach_with_prefix scenario {all minimal} {
    set flags [list debug additional_flags=-fgnat-encodings=$scenario]

    if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $flags] != ""} {
	return -1
    }

    clean_restart ${testfile}

    set bp_location [gdb_get_line_number "STOP" ${testdir}/foo.adb]
    runto "foo.adb:$bp_location"

    # Verify that a call to a function that takes an array as a parameter
    # works without problem.

    gdb_test "print call_me(\"bonjour\")" \
	"= void"

    # Verify that the array was passed properly by checking the global
    # variables that Call_Me sets as side-effects.  Use the package name to avoid
    # name clash with debug info of system libraries.

    gdb_test "print pck.first" \
	"= 98 'b'" \
	"print first after function call"

    gdb_test "print pck.last" \
	"= 114 'r'" \
	"print last after function call"

    gdb_test "print pck.length" \
	"= 7" \
	"print length after function call"
}
