# Copyright (C) 2016-2020 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] {
    perror "could not run to main"
    continue
}

# 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"
    }
}
