# Copyright 2013-2020 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"

standard_ada_testfile foo

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

clean_restart ${testfile}

if ![runto_main] then {
   fail "cannot run to main, testcase aborted"
   return 0
}

gdb_test "info exceptions" \
    [multi_line "All defined Ada exceptions:" \
                "constraint_error: $hex" \
                "program_error: $hex" \
                "storage_error: $hex" \
                "tasking_error: $hex" \
                ".*\[\r\n\]*const.aint_global_gdb_e: $hex\[\r\n\]*.*" ]

gdb_test "info exceptions task" \
    [multi_line "All Ada exceptions matching regular expression \"task\":" \
                "tasking_error: $hex"]

gdb_test "info exceptions global_gdb" \
    [multi_line "All Ada exceptions matching regular expression \"global_gdb\":" \
                "const.aint_global_gdb_e: $hex"]

gdb_test "info exceptions const.aint" \
    [multi_line "All Ada exceptions matching regular expression \"const\\.aint\":" \
                "constraint_error: $hex" \
                "const.aint_global_gdb_e: $hex"]

foreach cmd {exception handlers} {
    gdb_test "complete catch $cmd const.a" \
	"catch $cmd const.aint_global_gdb_e"
}
