# Copyright 2000, 2001, 2004 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

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

if $tracelevel then {
	strace $tracelevel
}

set prms_id 0
set bug_id 0

set testfile "return2"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

proc return_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"
    send_gdb "return testval.${type}_testval\n"
    gdb_expect {
	-re "Make ${type}_func return now.*y or n. $" {
	    send_gdb "y\n"
	    exp_continue
	}
	-re ".*${type}_resultval *= ${type}_func.*$gdb_prompt $" {
	    send_gdb "step\n"
	    exp_continue
	}
	-re ".*${type}_checkpoint.*$gdb_prompt $" {
	    pass "return from ${type}_func"
	}
	-re ".*$gdb_prompt $" {
	    fail "return from ${type}_func"
	}
	timeout {
	    fail "return from ${type}_func (timeout)"
	}
    }
    gdb_test "print ${type}_resultval == testval.${type}_testval" ".* = 1" \
	    "${type} value returned successfully"
    gdb_test "print ${type}_resultval != ${type}_returnval" ".* = 1" \
	    "validate result value not equal to program return value"
}

proc return_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"
    send_gdb "return \n"
    gdb_expect {
	-re "Make void_func return now.*y or n. $" {
	    send_gdb "y\n"
	    exp_continue
	}
	-re ".*void_func.*call to void_func.*$gdb_prompt $" {
	    send_gdb "step\n"
	    exp_continue
	}
	-re ".*void_checkpoint.*$gdb_prompt $" {
	    pass "return from void_func"
	}
	-re ".*$gdb_prompt $" {
	    fail "return from void_func"
	}
	timeout {
	    fail "return from void_func (timeout)"
	}
    }
    gdb_test "print void_test == 0" ".* = 1" \
	    "void function returned successfully"
}

proc return2_tests { } {
    global gdb_prompt

    if { ! [ runto_main ] } then {
	gdb_suppress_entire_file "Run to main failed, so all tests in this file will automatically fail."
    }

    return_void
    return_1 "char"
    return_1 "short"
    return_1 "int"
    return_1 "long"
    if { ! [istarget "m6811-*-*"] && ![istarget "h8300*-*"] } then {
        return_1 "long_long"
    }
    return_1 "float"
    if { ! [istarget "m6811-*-*"] } then {
        return_1 "double"
    }
}

# Start with a fresh gdb.

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

set timeout 30
return2_tests
