# Copyright 2009-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

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 "START" ${testdir}/foo.adb]
    runto "foo.adb:$bp_location"

    set test "print my_buffer"
    gdb_test_multiple "$test" $test {
	-re "= \\(size => 8, buffer => \\(1, 2, 3, 4, 5, 6, 7, 0\\), length => 8\\)\[\r\n\]+$gdb_prompt $" {
	    pass $test
	}
	-re "= \\(size => 8, length => 8, buffer => \\(1, 2, 3, 4, 5, 6, 7, 0\\)\\)\[\r\n\]+$gdb_prompt $" {
	    pass $test
	}
	-re " = \\(size => 8, length => 8, buffer => warning: could not find bounds information on packed array.*$gdb_prompt $" {
	    # GNAT >= 11.0 has the needed fix here.
	    if {$scenario == "minimal" && ![test_compiler_info {gcc-1[1-9]-*}]} {
		setup_kfail "minimal encodings" *-*-*
	    }
	    fail $test
	}
    }

    gdb_test "print my_buffer'Address" \
	"= \\(system\\.address\\) $hex" \
	"print address"

    set test "print {foo.octal_buffer}($)"
    gdb_test_multiple "$test" $test {
	-re "= \\(size => 8, buffer => \\(1, 2, 3, 4, 5, 6, 7, 0\\), length => 8\\)\[\r\n\]+$gdb_prompt $" {
	    pass $test
	}
	-re "= \\(size => 8, length => 8, buffer => \\(1, 2, 3, 4, 5, 6, 7, 0\\)\\)\[\r\n\]+$gdb_prompt $" {
	    pass $test
	}
	-re " = \\(size => 8, length => 8, buffer => warning: could not find bounds information on packed array.*$gdb_prompt $" {
	    # GNAT >= 11.0 has the needed fix here.
	    if {$scenario == "minimal" && ![test_compiler_info {gcc-1[1-9]-*}]} {
		setup_kfail "minimal encodings" *-*-*
	    }
	    fail $test
	}
    }
}
