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

load_lib "ada.exp"

require allow_ada_tests

standard_ada_testfile caller

set options {
    debug
    optimize=-O2
    additional_flags=-ffunction-sections
    ldflags=-largs
    ldflags=-Wl,--gc-sections
    ldflags=-margs
    additional_flags=-gnatn
}
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable $options] != ""} {
    return -1
}

clean_restart ${testfile}


# Depending on the version of gnat, the location of the set breakpoint may
# be reported as being at the requested location in file callee.adb or in
# file caller.adb where the callee function was inlined.  Either way, only
# one breakpoint should be reported and its address should not be at 0x0.
set bp_location1 [gdb_get_line_number "BREAK" ${testdir}/callee.adb]
set bp_location2 [gdb_get_line_number "CALLEE_LOC" ${testdir}/caller.adb]
set test "break callee.adb:$bp_location1"
set message "Breakpoint set"

# The bug here was that gdb would set a breakpoint with two locations,
# one of them at 0x0.
gdb_test_multiple $test $message {
    -re "Breakpoint $decimal at $hex: file .*callee.adb, line $bp_location1." {
	pass $test
    }
    -re "Breakpoint $decimal at $hex: file .*caller.adb, line $bp_location2." {
	pass $test
    }
}
