# Copyright 2004, 2007-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/>.

set testfile "sep"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug nowarnings}] != "" } {
    untested sep.exp
    return -1
}

set location [gdb_get_line_number "say_hello" "sep-proc.c"]

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

# Try to display the source code inside a file which is included by
# another source file.  The purpose of this test is to verify that
# this operation works, even before we have loaded full symbols for
# that file (by doing a "break say_hello" for instance).
#
# We just check that the command succeeds, so no need to match the
# complete exact output.  Simply verifying that we get procedure
# say_hello is good enough, and avoid unnecessary failures is someone
# decides later to reformat sep-proc.c.

gdb_test "list sep-proc.c:$location" \
         "void.*say_hello.*" \
         "list using location inside included file"

# Try the same, but this time with a breakpoint.  We need to exit
# GDB to make sure that we havn't loaded the full symbols yet when
# we test the breakpoint insertion.
gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

set test "breakpoint inside included file"
gdb_test_multiple "break sep-proc.c:$location" "$test" {
    -re "Breakpoint.*at.* file .*sep-proc.c, line .*" {
        pass "$test"
    }
    -re "No source file named sep-proc.c.*" {
        fail "$test"
    }
}

