# Copyright 1997-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/>.

standard_testfile normal.c

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

if { ![runto_main] } {
    fail "can't run to main"
    return -1
}

gdb_test "info program" "Program stopped at $hex\.\r\nIt stopped at breakpoint $decimal\.\r\nType \"info stack\" or \"info registers\" for more information\." \
    "info program after run to main"

# We don't really care where this step lands, so long as it gets
# the inferior pushed off the breakpoint it's currently on...
gdb_test "next" "$decimal\t.*" "step before info program"

gdb_test "info program" "Program stopped at $hex\.\r\nIt stopped after being stepped\.\r\nType \"info stack\" or \"info registers\" for more information\." \
    "info program after next"

if { ![runto_main] } then {
    fail "can't restart program"
    return -1
}

delete_breakpoints

gdb_test "info program" "Program stopped at $hex\.\r\nIt stopped at a breakpoint that has since been deleted\.\r\nType \"info stack\" or \"info registers\" for more information\." \
    "info program after deleting all breakpoints"
