#   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

if { [prepare_for_testing "failed to prepare" "skip-inline" \
			  {skip-inline.c skip1.c } \
			  {debug nowarnings}] } {
    return -1
}

set srcfile skip-inline.c
set srcfile1 skip1.c

if ![runto_main] {
    return
}

# Create a skiplist entry for a specified file and function.

gdb_test "skip function foo" "Function foo will be skipped when stepping\."

gdb_test "bt" "\\s*\\#0\\s+main.*" "in the main"
gdb_test "step" ".*" "step into baz, since foo will be skipped"
gdb_test "bt" "\\s*\\#0\\s+baz.*" "in the baz, since foo was skipped"
gdb_test "step" ".*" "step in the baz"
gdb_test "bt" "\\s*\\#0\\s+baz.*" "still in the baz"
gdb_test "step" ".*" "step back to main"
gdb_test "bt" "\\s*\\#0\\s+main.*" "again in the main"
gdb_test "step" ".*" "step again into baz, since foo will be skipped"
gdb_test "bt" "\\s*\\#0\\s+baz.*" "again in the baz"
gdb_test "step" ".*" "step in the baz, again"
gdb_test "bt" "\\s*\\#0\\s+baz.*" "still in the baz, again"
gdb_test "step" ".*" "step back to main, again"
gdb_test "bt" "\\s*\\#0\\s+main.*" "again back to main"

if ![runto_main] {
    return
}

with_test_prefix "double step" {
    gdb_test "bt" "\\s*\\#0\\s+main.*" "in the main"
    gdb_test "step 2" ".*" "step into baz, since foo will be skipped"
    gdb_test "bt" "\\s*\\#0\\s+baz.*" "still in the baz"
    gdb_test "step" ".*" "step back to main"
    gdb_test "bt" "\\s*\\#0\\s+main.*" "again in the main"
    gdb_test "step 2" ".*" "step again into baz, since foo will be skipped"
    gdb_test "bt" "\\s*\\#0\\s+baz.*" "again in the baz"
    gdb_test "step" ".*" "step back to main, again"
    gdb_test "bt" "\\s*\\#0\\s+main.*" "again back to main"
}

if ![runto_main] {
    return
}

with_test_prefix "triple step" {
    gdb_test "bt" "\\s*\\#0\\s+main.*" "in the main"
    gdb_test "step 3" ".*" "step over baz"
    gdb_test "bt" "\\s*\\#0\\s+main.*" "again in the main"
    gdb_test "step 3" ".*" "step over baz, again"
    gdb_test "bt" "\\s*\\#0\\s+main.*" "again back to main"
}

if ![runto_main] {
    return
}

gdb_test "skip delete" ".*" "skip delete"

with_test_prefix "skip current frame" {
    gdb_test "bt" "\\s*\\#0\\s+main.*" "in the main"
    gdb_test "step" ".*" "step into foo"
    gdb_test "bt" "\\s*\\#0\\s+foo.*" "in the foo"
    gdb_test "skip" "Function foo will be skipped when stepping\." "skip"
}
