diff options
Diffstat (limited to 'gdb/testsuite/gdb.cp')
-rw-r--r-- | gdb/testsuite/gdb.cp/exceptprint.cc | 65 | ||||
-rw-r--r-- | gdb/testsuite/gdb.cp/exceptprint.exp | 73 |
2 files changed, 138 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.cp/exceptprint.cc b/gdb/testsuite/gdb.cp/exceptprint.cc new file mode 100644 index 00000000000..994b5010d69 --- /dev/null +++ b/gdb/testsuite/gdb.cp/exceptprint.cc @@ -0,0 +1,65 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2013 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/>. */ + +template<typename T> +void +throwit (T val) +{ + throw val; +} + +template<typename T> +void +rethrowit (T val) +{ + try + { + try + { + throwit (val); + } + catch (...) + { + throw; + } + } + catch (...) + { + // Ignore. + } +} + +struct maude +{ + int mv; + + maude (int x) : mv (x) { } +}; + +int +main (int argc, char **argv) +{ + maude mm (77); + maude &mmm (mm); + + rethrowit ("hi bob"); + rethrowit (23); + rethrowit (mm); + rethrowit (mmm); + + return 0; +} diff --git a/gdb/testsuite/gdb.cp/exceptprint.exp b/gdb/testsuite/gdb.cp/exceptprint.exp new file mode 100644 index 00000000000..6e03fd9ab55 --- /dev/null +++ b/gdb/testsuite/gdb.cp/exceptprint.exp @@ -0,0 +1,73 @@ +# Copyright 2013 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/>. + +standard_testfile .cc + +if {[skip_cplus_tests]} { + return -1 +} + +if {[prepare_for_testing $testfile.exp $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\\)" \ + "catch catch" +gdb_test "catch throw" "Catchpoint \[0-9\]+ \\(throw\\)" \ + "catch throw" +gdb_test "catch rethrow" "Catchpoint \[0-9\]+ \\(rethrow\\)" \ + "catch 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}" |