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

if { [is_remote target] || ![isnative] } then {
    unsupported "inferior-died.exp"
    continue
}

# Until "set follow-fork-mode" and "catch fork" are implemented on
# other targets...
#
if {![istarget "hppa*-hp-hpux*"] && ![istarget "*-*-linux*"]} then {
    unsupported "inferior-died.exp"
    continue
}

if { ![support_displaced_stepping] } {
    unsupported "inferior-died.exp"
    return -1
}

set testfile "inferior-died"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if { [prepare_for_testing ${testfile}.exp ${testfile} ${testfile}.c] } {
    return -1
}

gdb_test_no_output "set detach-on-fork off"
gdb_test_no_output "set target-async on"
gdb_test_no_output "set non-stop on"

if ![runto_main] {
    return
}

set line [gdb_get_line_number "Break here"]
gdb_breakpoint $srcfile:$line

gdb_continue_to_breakpoint "breakpoint"

gdb_test "inferior 2" "Switching to inferior 2.*"

# The inferior 1 exit may come unexpectedly in any moment.
set test "continue"
set seen 0
gdb_test_multiple $test $test {
    -re "($gdb_prompt |\\\[Inferior \[^\r\n\]* exited normally\\\])" {
	incr seen
	if {$seen < 3} {
	    exp_continue
	}
	pass $test
    }
}

# Internal error may show up after all the messages above.
gdb_test "p 1" " = 1"
