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

# Note that the testcase gdb.dwarf2/dw2-inline-break.exp largely
# mirrors this testcase, and should be updated if this testcase is
# changed.

standard_testfile

if { [prepare_for_testing $testfile.exp $testfile $srcfile \
          {debug optimize=-O2 additional_flags=-Winline}] } {
    return -1
}

#
# func1 is a static inlined function that is called once.
# The result should be a single-location breakpoint.
#
gdb_test "break func1" \
    "Breakpoint.*at.* file .*$srcfile, line.*"

#
# func2 is a non-static inlined function that is called once.
# The result should be a breakpoint with two locations: the
# out-of-line function and the single inlined instance.
#
gdb_test "break func2" \
    "Breakpoint.*at.*func2.*\\(2 locations\\)"

#
# func3b is a static inlined function that is called once from
# within another static inlined function.  The result should be
# a single-location breakpoint.
#
gdb_test "break func3b" \
    "Breakpoint.*at.* file .*$srcfile, line.*"

#
# func4b is a static inlined function that is called once from
# within a non-static inlined function.  The result should be
# a breakpoint with two locations: the inlined instance within
# the inlined call to func4a in main, and the inlined instance
# within the out-of-line func4a.
#
gdb_test "break func4b" \
    "Breakpoint.*at.*func4b.*\\(2 locations\\)"

#
# func5b is a non-static inlined function that is called once
# from within a static inlined function.  The result should be a
# breakpoint with two locations: the out-of-line function and the
# inlined instance within the inlined call to func5a in main.
#
gdb_test "break func5b" \
    "Breakpoint.*at.*func5b.*\\(2 locations\\)"
#
# func6b is a non-static inlined function that is called once from
# within another non-static inlined function.  The result should be
# a breakpoint with three locations: the out-of-line function, the
# inlined instance within the out-of-line func6a, and the inlined
# instance within the inlined call to func6a in main,
#
gdb_test "break func6b" \
    "Breakpoint.*at.*func6b.*\\(3 locations\\)"

#
# func7b is a static inlined function that is called twice: once from
# func7a, and once from main.  The result should be a breakpoint with
# two locations: the inlined instance within the inlined instance of
# func7a, and the inlined instance within main.
#
gdb_test "break func7b" \
    "Breakpoint.*at.*func7b.*\\(2 locations\\)"

#
# func8b is a non-static inlined function that is called twice: once
# func8a, and once from main.  The result should be a breakpoint with
# three locations: the out-of-line function, the inlined instance
# within the inlined instance of func7a, and the inlined instance
# within main.
#
gdb_test "break func8b" \
    "Breakpoint.*at.*func8b.*\\(3 locations\\)"

#
# func1 is a static inlined function.  The result should be that no
# symbol is found to print.
#
gdb_test "print func1" \
    "No symbol \"func1\" in current context."

#
# func2 is a non-static inlined function.  The result should be that
# one symbol is found to print, and that the printed symbol is called
# "func2".  Note that this does not cover the failure case that two
# symbols were found, but that gdb chose the out-of-line copy to
# print, but if this was failing the "print func1" test would likely
# fail instead.
#
gdb_test "print func2" \
    "\\\$.* = {int \\(int\\)} .* <func2>"
