# Copyright 2013-2021 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 . standard_testfile .cc if {[skip_cplus_tests]} { return -1 } if {[prepare_for_testing "failed to prepare" $testfile $srcfile {debug c++}]} { return -1 } if {![runto_main]} { return -1 } if {[skip_libstdcxx_probe_tests]} { untested "could not find libstdc++ stap probe" return -1 } proc do_continue_to_catchpoint {name} { global gdb_prompt gdb_test_multiple "continue" $name { -re "Continuing.*Catchpoint \[0-9\].*\r\n$gdb_prompt $" { pass $name } } } proc do_exceptprint_tests {prefix output} { with_test_prefix $prefix { do_continue_to_catchpoint "continue to throw" gdb_test "print \$_exception" " = $output" \ "print exception value at throw" do_continue_to_catchpoint "continue to catch" gdb_test "print \$_exception" " = $output" \ "print exception value at catch" do_continue_to_catchpoint "continue to rethrow" gdb_test "print \$_exception" " = $output" \ "print exception value at rethrow" do_continue_to_catchpoint "continue to final catch" } } gdb_test "catch catch" "Catchpoint \[0-9\]+ \\(catch\\)" gdb_test "catch throw" "Catchpoint \[0-9\]+ \\(throw\\)" gdb_test "catch rethrow" "Catchpoint \[0-9\]+ \\(rethrow\\)" do_exceptprint_tests string "$hex \"hi bob\"" do_exceptprint_tests int 23 do_exceptprint_tests struct "{mv = 77}" do_exceptprint_tests "reference to struct" "{mv = 77}" delete_breakpoints if {![runto_main]} { return -1 } with_test_prefix "2nd run" { gdb_test "catch catch int if \$_exception == 23" \ "Catchpoint \[0-9\]+ \\(catch\\)" \ "catch catch" gdb_test "catch throw int if \$_exception == 23" \ "Catchpoint \[0-9\]+ \\(throw\\)" \ "catch throw" gdb_test "catch rethrow int if \$_exception == 23" \ "Catchpoint \[0-9\]+ \\(rethrow\\)" \ "catch rethrow" } # This tests both the case where the regular expression does not # match, and the case where it does. with_test_prefix "2nd run" { do_exceptprint_tests int 23 }