Add translations for various sub-directories
[binutils-gdb.git] / gdb / testsuite / gdb.ada / excep_handle.exp
blob2a99457ddcd2ba392a71f196eddeaa947b0882d8
1 # Copyright 2018-2024 Free Software Foundation, Inc.
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 3 of the License, or
6 # (at your option) any later version.
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
13 # You should have received a copy of the GNU General Public License
14 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 load_lib "ada.exp"
18 require allow_ada_tests gnat_runtime_has_debug_info
20 standard_ada_testfile foo
22 if {[gdb_compile_ada "${srcfile}" "${binfile}" executable [list debug additional_flags=-gnata ]] != "" } {
23   return -1
26 clean_restart ${testfile}
28 # Some global variables used to simplify the maintenance of some of
29 # the regular expressions below.
30 set eol "\r\n"
31 set sp "\[ \t\]*"
33 set when "when"
34 set catchpoint_constraint_error_msg \
35   "Catchpoint $decimal, exception at $hex in foo \\\(\\\).*at .*foo.adb:$decimal$eol$decimal$sp$when Constraint_Error =>"
37 set catchpoint_program_error_msg \
38   "Catchpoint $decimal, exception at $hex in foo \\\(\\\).*at .*foo.adb:$decimal$eol$decimal$sp$when Program_Error =>"
40 set catchpoint_storage_error_msg \
41   "Catchpoint $decimal, exception at $hex in foo \\\(\\\).*at .*foo.adb:$decimal$eol$decimal$sp$when Storage_Error =>"
43 if {![runto_main]} {
44    return 0
47 ############################################
48 # 1. Try catching all exceptions handlers. #
49 ############################################
51 gdb_test "catch handlers" \
52     "Catchpoint $decimal: all Ada exceptions handlers" \
53     "insert catchpoint on all Ada exceptions handlers"
55 # Continue.  The program should stop at first exception handling.
57 gdb_test "continue" \
58     "Continuing\\.$eol$eol$catchpoint_constraint_error_msg" \
59     "continuing to first Constraint_Error exception handlers"
61 # Resume the program's exception.
63 # The program will first go through a block of code which has an
64 # exception handler, but since no exception is raised, we should
65 # not stop there.  Instead, we expect to stop in the handler of
66 # the next exception being raised.
68 gdb_test "continue" \
69     "Continuing\\.$eol$eol$catchpoint_storage_error_msg" \
70     "continuing and stopping in Storage_Error exception handlers"
72 gdb_test_no_output "delete 2" \
73                    "delete catchpoint on all Ada exceptions handlers"
75 ##################################################
76 # 2. Try catching some named exception handlers. #
77 ##################################################
79 # Insert a catchpoint on Program_Error Ada exception handlers.
81 gdb_test "catch handlers Program_Error" \
82          "Catchpoint $decimal: `Program_Error' Ada exception handlers" \
83          "insert catchpoint on Program_Error Ada exception handlers"
85 # Continue, we should not stop at ABORT_SIGNAL but at Program_Error one.
87 gdb_test "continue" \
88     "Continuing\\.$eol$eol$catchpoint_program_error_msg" \
89     "continuing without stopping to Program_Error exception handlers"
91 gdb_test_no_output \
92     "delete 3" \
93     "delete catchpoint on all Program_Error Ada exception handlers"
95 # Insert a catchpoint on Storage_Error Ada exception handlers.
97 gdb_test "catch handlers Storage_Error" \
98          "Catchpoint $decimal: `Storage_Error' Ada exception handlers" \
99          "insert catchpoint on Storage_Error Ada exception handlers"
101 # Continue, we should stop at Storage_Error handlers.
103 gdb_test "continue" \
104     "Continuing\\.$eol$eol$catchpoint_storage_error_msg" \
105     "continuing without stopping to Storage_Error exception handlers"
107 gdb_test_no_output \
108     "delete 4" \
109     "delete catchpoint on all Storage_Error Ada exception handlers"
111 ########################################################################
112 # 3. Try catching with condition and without named exception handlers. #
113 ########################################################################
115 # Insert a catchpoint on all Ada exceptions handlers with condition.
117 gdb_test "catch handlers if Global_Var = 2" \
118          "Catchpoint $decimal: all Ada exceptions handlers" \
119          "insert catchpoint on all Ada exception handlers with condition"
121 # Check that condition is stored and properly displayed.
123 gdb_test "info breakpoint" "stop only if Global_Var = 2" \
124          "Check catch handlers with condition"
126 # Continue, we should not stop at ABORT_SIGNAL but at Program_Error one.
128 gdb_test "continue" \
129     "Continuing\\.$eol$eol$catchpoint_constraint_error_msg" \
130     "continuing to second Constraint_Error exception handlers"
132 gdb_test_no_output \
133     "delete 5" \
134     "delete catchpoint on all all Ada exceptions handlers with condition"
136 ################################################################
137 # 4. Try catching with condition and named exception handlers. #
138 ################################################################
140 # Insert a catchpoint on Program_Error Ada exception handlers with
141 # condition.
143 gdb_test "catch handlers Program_Error if Global_Var = 4" \
144     "Catchpoint $decimal: `Program_Error' Ada exception handlers" \
145     "insert catchpoint on Program_Error Ada exception handlers with condition"
147 # Continue, we should not stop at first Program_Error handlers but at
148 # the second one.
150 gdb_test "continue" \
151     "Continuing\\.$eol$eol$catchpoint_program_error_msg" \
152     "continuing to Program_Error exception handlers"
154 # Continue, the program should exit properly.
156 gdb_test "continue" \
157          "Continuing\\..*$inferior_exited_re.*" \
158          "continuing to program completion"