# Copyright (C) 2016-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/>.

# This file is part of the GDB testsuite.  It tests proper handling for
# breakpoint creation failure.

load_lib gdb-python.exp

standard_testfile

if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile}] } {
    return -1
}

# Skip all tests if Python scripting is not enabled.
if { [skip_python_tests] } { continue }

clean_restart "${testfile}"
if ![runto_main] {
    return
}

# The following will create a breakpoint Python wrapper whose construction will
# abort: the requested symbol is not defined.  GDB should not keep a reference
# to the wrapper; however it used to...
gdb_test "source py-breakpoint-create-fail.py"

# ... and when it did, as a result, the following breakpoint creation (not
# initiated by the Python API) would dereference the already-freed Python
# breakpoint wrapper, resulting in undefined behavior, sometimes observed as a
# gdb crash, and other times causing the next stop to invoke the Python wrapper
# "stop" method for the object that is not supposed to exist.
gdb_test "break foo"

set test "continuing to foo"
gdb_test_multiple "continue" "$test" {
    -re "MyBP\.stop was invoked\!.*$gdb_prompt $" {
        fail "$test"
    }
    -re "Continuing.*Breakpoint 2, foo.*$gdb_prompt $" {
        pass "$test"
    }
}
