# Copyright 2004, 2007, 2008 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/>.
#
# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

if $tracelevel then {
    strace $tracelevel
}

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
}

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:23" \
         "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:25" "$test" {
    -re "Breakpoint.*at.* file .*sep-proc.c, line .*" {
        pass "$test"
    }
    -re "No source file named sep-proc.c.*" {
        fail "$test"
    }
}

