# Copyright 2012 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"

set testdir "bp_enum_homonym"
set testfile "${testdir}/p"
set srcfile ${srcdir}/${subdir}/${testfile}.adb
set binfile ${objdir}/${subdir}/${testfile}

file mkdir ${objdir}/${subdir}/${testdir}
if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug ]] != "" } {
  return -1
}

clean_restart ${testfile}

# Force GDB to convert the psymtab of pck.adb into a symtab.
gdb_test "list pck.adb:1" \
         "$decimal\[ \t\]+--  Copyright.*"

# Break on subprogram "Archive". There is an enumeral that's an
# homonym, so verify that GDB doesn't provide the choice between
# the subprogram and the enumeral for the location of the breakpoint.
# Instead, it should insert the breakpoint on the function alone.

gdb_test "break archive" \
         "Breakpoint $decimal at $hex: file .*pck.adb, line $decimal\\."

# Run the program. Make sure the program runs until it hits
# the breakpoint and that the debugger does not unexpectedly ask
# the user to choose between several locations for the breakpoint
# (while the inferior is starting up, new DSOs being mapped causes
# the breakpoint location to be reevaluated).

gdb_run_cmd
gdb_test "" \
         "Breakpoint $decimal, pck\\.archive \\(\\).*" \
         "run to pck.archive breakpoint"

