# Copyright (C) 2014-2021 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/>.

# Test that "c -a" doesn't leave GDB processing input, even if all
# threads were already running.  PR gdb/17300.

standard_testfile

save_vars { GDBFLAGS } {
    set GDBFLAGS "$GDBFLAGS -ex \"set non-stop on\""
    if { [prepare_for_testing "failed to prepare" ${testfile} $srcfile] } {
	return -1
    }
}

if ![runto_main] {
    return
}

set linenum [gdb_get_line_number "set break here"]
gdb_breakpoint "$linenum"

gdb_test "c -a&" "Continuing\\."

set test "no stop"
gdb_test_multiple "" $test {
    -timeout 1
    timeout {
	pass $test
    }
}

# Paranoia.  Check that input works after bg command.
gdb_test "print 1" " = 1"

# Continue in the foreground, and wait one second to make sure the
# inferior really starts running.  If we get a prompt to soon (e.g.,
# the program stops), this issues a fail.
set saw_continuing 0
set test "c -a"
gdb_test_multiple "c -a" $test {
    -timeout 1
    -re "Continuing\\." {
	set saw_continuing 1
	exp_continue
    }
    timeout {
	gdb_assert $saw_continuing $test
    }
}

# Type something while the inferior is running in the foreground.
send_gdb "print 2\n"

# Poor buggy GDB would crash before the breakpoint was hit.
set test "breakpoint hit"
gdb_test_multiple "" $test {
    -re "set break here ..\r\n$gdb_prompt " {
	pass $test
    }
}

set test "print command result"
gdb_test_multiple "" $test {
    -re " = 2\r\n$gdb_prompt $" {
	pass $test
    }
}
