# This testcase is part of GDB, the GNU debugger.

# Copyright 2008-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

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

if ![runto_main] then {
   return 0
}

set bp_location [gdb_get_line_number "set breakpoint here"]

gdb_test "break $bp_location" \
    "Breakpoint.*at.* file .*$srcfile, line $bp_location\\." \
    "breakpoint line number"

gdb_test continue "Continuing\\..*Breakpoint \[0-9\]+, main \\(\\) at .*$srcfile:$bp_location.*set breakpoint here.*" \
    "run until breakpoint set at a line number"

gdb_test "next 2" ".*place2.*" "next 2 (1)"
gdb_test "next 2" ".*place3.*" "next 2 (2)"
gdb_test "next 2" ".*place2.*" "next 2 (3)"
gdb_test "next 2" ".*place3.*" "next 2 (4)"
gdb_test "next 2" ".*place2.*" "next 2 (5)"
gdb_test "next 2" ".*place3.*" "next 2 (6)"

return 0
