# Copyright 2012-2013 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>"
