# Copyright 2000-2020 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/>.

# This file was written by Michael Snyder (msnyder@redhat.com)

set skip_float_test [gdb_skip_float_test]

# re-use the program from the "return2" test.
if { [prepare_for_testing "failed to prepare" finish return2.c] } {
    return -1
}

proc finish_1 { type } {
    global gdb_prompt

    gdb_test "break ${type}_func" "Breakpoint \[0123456789\].*" \
	    "set break on ${type}_func"
    gdb_test "continue" "Breakpoint.* ${type}_func.*" \
	    "continue to ${type}_func"
    gdb_test_multiple "finish" "finish from ${type}_func" {
	-re ".*Value returned is .* = 49 '1'\r\n$gdb_prompt $" {
	    if { $type == "char" } {
		pass "finish from char_func"
	    } else {
		fail "finish from ${type}_func"
	    }
	}
	-re ".*Value returned is .* = \[0123456789\]* '1'\r\n$gdb_prompt $" {
	    if { $type == "char" } {
		pass "finish from char_func (non-ASCII char set?)"
	    } else {
		fail "finish from ${type}_func"
	    }
	}
	-re ".*Value returned is .* = 1\r\n$gdb_prompt $" {
	    pass "finish from ${type}_func"
	}
    }
}

proc finish_void { } {
    global gdb_prompt

    gdb_test "break void_func" "Breakpoint \[0123456789\].*" \
	    "set break on void_func"
    gdb_test "continue" "Breakpoint.* void_func.*" \
	    "continue to void_func"
    # Some architectures will have one or more instructions after the
    # call instruction which still is part of the call sequence, so we
    # must be prepared for a "finish" to show us the void_func call
    # again as well as the statement after.
    gdb_test_multiple "finish" "finish from void_func" {
	-re ".*void_checkpoint.*$gdb_prompt $" {
	    pass "finish from void_func"
	}
	-re "0x\[0-9a-fA-F\]+ in main.*call to void_func.*$gdb_prompt $" {
	    pass "finish from void_func"
	}
    }
}

# A function that tests that the given ABBREV is a working abbreviation
# of the "finish" command.

proc finish_abbreviation { abbrev } {

    if { ! [ runto "int_func" ] } then {
        fail "running to int_func"
        return -1
    }

    gdb_test "$abbrev" \
             "Value returned is .* = 1" \
             "Testing the \"$abbrev\" abbreviation for \"finish\""
}

# Test "set print finish off".
proc finish_no_print {} {
    global decimal

    if {![runto "int_func"]} {
	untested "couldn't run to main"
	return
    }
    gdb_test_no_output "set print finish off"
    gdb_test "finish" \
	"Value returned is \\\$$decimal = <not displayed>"
    gdb_test "print \$" " = 1" \
	"Ensure return value was properly saved"
}

proc finish_tests { } {
    global gdb_prompt skip_float_test

    if { ! [ runto_main ] } then {
	untested "couldn't run to main"
	return -1
    }

    finish_void
    finish_1 "char"
    finish_1 "short"
    finish_1 "int"
    finish_1 "long"
    finish_1 "long_long"
    if {!$skip_float_test} {
	finish_1 "float"
	finish_1 "double"
    }
    finish_abbreviation "fin"
    finish_no_print
}

set prev_timeout $timeout
set timeout 30
finish_tests
set timeout $prev_timeout
