1# Copyright 2013-2023 Free Software Foundation, Inc. 2 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. 7# 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. 12# 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/>. 15 16standard_testfile .cc 17 18if {[skip_cplus_tests]} { 19 return -1 20} 21 22if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { 23 return -1 24} 25 26if {![runto_main]} { 27 return -1 28} 29 30if {[skip_libstdcxx_probe_tests]} { 31 untested "could not find libstdc++ stap probe" 32 return -1 33} 34 35proc do_continue_to_catchpoint {name} { 36 global gdb_prompt 37 38 gdb_test_multiple "continue" $name { 39 -re "Continuing.*Catchpoint \[0-9\].*\r\n$gdb_prompt $" { 40 pass $name 41 } 42 } 43} 44 45proc do_exceptprint_tests {prefix output} { 46 with_test_prefix $prefix { 47 do_continue_to_catchpoint "continue to throw" 48 gdb_test "print \$_exception" " = $output" \ 49 "print exception value at throw" 50 51 do_continue_to_catchpoint "continue to catch" 52 gdb_test "print \$_exception" " = $output" \ 53 "print exception value at catch" 54 55 do_continue_to_catchpoint "continue to rethrow" 56 gdb_test "print \$_exception" " = $output" \ 57 "print exception value at rethrow" 58 59 do_continue_to_catchpoint "continue to final catch" 60 } 61} 62 63gdb_test "catch catch" "Catchpoint \[0-9\]+ \\(catch\\)" 64gdb_test "catch throw" "Catchpoint \[0-9\]+ \\(throw\\)" 65gdb_test "catch rethrow" "Catchpoint \[0-9\]+ \\(rethrow\\)" 66 67do_exceptprint_tests string "$hex \"hi bob\"" 68do_exceptprint_tests int 23 69do_exceptprint_tests struct "{mv = 77}" 70do_exceptprint_tests "reference to struct" "{mv = 77}" 71 72 73delete_breakpoints 74 75if {![runto_main]} { 76 return -1 77} 78 79with_test_prefix "2nd run" { 80 gdb_test "catch catch int if \$_exception == 23" \ 81 "Catchpoint \[0-9\]+ \\(catch\\)" \ 82 "catch catch" 83 gdb_test "catch throw int if \$_exception == 23" \ 84 "Catchpoint \[0-9\]+ \\(throw\\)" \ 85 "catch throw" 86 gdb_test "catch rethrow int if \$_exception == 23" \ 87 "Catchpoint \[0-9\]+ \\(rethrow\\)" \ 88 "catch rethrow" 89} 90 91# This tests both the case where the regular expression does not 92# match, and the case where it does. 93with_test_prefix "2nd run" { 94 do_exceptprint_tests int 23 95} 96