# Copyright 2019-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 <http://www.gnu.org/licenses/>.

standard_testfile exceptprint.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] == 0 } {
    untested "Have libstdc++ stap probe"
    return -1
}

gdb_test "catch throw" "Catchpoint $decimal \\(throw\\)" \
    "catch throw"

gdb_test "continue" "Continuing.*Catchpoint $decimal.*"

gdb_test "print \$_exception" \
    "did not find exception probe \\(does libstdcxx have SDT probes\\?\\).*"
