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

# This file was written by Elena Zannoni (ezannoni@cygnus.com)



standard_testfile

# Test depends on printf, which the sparclet stub doesn't support.  
if { [istarget "sparclet-*-*"] } {
    return 0
}

# Some targets can't call functions, so don't even bother with this
# test.
if [target_info exists gdb,cannot_call_functions] {
    setup_xfail "*-*-*" 2416
    fail "This target can not call functions"
    continue
}

# Create and source the file that provides information about the compiler
# used to compile the test case.

if [get_compiler_info] {
    return -1
}

if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} {
    untested $testfile.exp
    return -1
}


set oldtimeout $timeout
set timeout [expr "$timeout + 60"]

gdb_test_no_output "set print sevenbit-strings"
gdb_test_no_output "set print address off"
gdb_test_no_output "set width 0"


if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

get_debug_format

#go -until 1209
gdb_test "tbreak 1209" \
    "Temporary breakpoint \[0-9\]+.*file.*$srcfile, line 1209.*" \
    "tbreakpoint line 1209"

gdb_test continue \
"Continuing\\..*main \\(\\) at.*$srcfile:1209.*" \
"run until breakpoint set at a line"


#call print_double_array(double_array)
if {![gdb_skip_float_test "print print_double_array(double_array)"] && \
    ![gdb_skip_stdio_test "print print_double_array(double_array)"] } {
    gdb_test_sequence "print print_double_array(double_array)" "" {
	"\[ \t\r\n\]+array_d :"
	"\[ \t\r\n\]+========="
	"\[ \t\r\n\]+0.000000"
	"\[ \t\r\n\]+23.456\[0-9\]*  46.913\[0-9\]*  70.370\[0-9\]*  93.826\[0-9\]*  117.283\[0-9\]*  140.740\[0-9\]*  164.196\[0-9\]*  187.653\[0-9\]"
	"\[ \t\r\n\]+"
    }
}

#call print_char_array(char_array)

if ![gdb_skip_stdio_test "print_char_array(char_array)"] {
    gdb_test_sequence "print print_char_array(char_array)" "" {
	"\[ \t\r\n\]+array_c :"
	"\[ \t\r\n\]+========="
	"\[ \t\r\n\]+\[ \t\r\n\]+Z"
	"\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ"
	"\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ"
	"\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZa\[ \t\r\n\]+\[ \t\r\n\]+"
    }
}

#go -until 1216
gdb_test "tbreak 1216" \
"Temporary breakpoint.*file.*$srcfile, line 1216.*" \
"tbreakpoint line 1216"

if ![gdb_skip_stdio_test "continue to 1216"] {
    gdb_test_sequence "continue" "continue to 1216" {
	"\[ \t\r\n\]+array_c :"
	"\[ \t\r\n\]+========="
	"\[ \t\r\n\]+\[ \t\r\n\]+Z"
	"\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ"
	"\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ"
	"\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZa"
	"\[ \t\r\n\]+main.*at.*:1216"
	"\[ \t\r\n\]+1216.*print_double_array\\(double_array\\)"
    }
} else {
    gdb_test "continue" ".*" ""
}

# I am disabling this test, because it takes too long. I verified by
# hand that it works, feel free to check for yourself. 
#call print_all_arrays(integer_array, char_array, float_array, double_array)
#send_gdb "print print_all_arrays(integer_array, char_array, float_array, double_array)\n"
#gdb_expect {
#    -re ".*array_i :\[ \t\r\n\]+=========\[ \t\r\n\]+\[ \t\r\n\]+0\[ \t\r\n\]+-1  -2  -3  -4  -5  -6  -7  -8\[ \t\r\n\]+-9  -10  -11  -12  -13  -14  -15  -16\[ \t\r\n\]+-17  -18  -19  -20  -21  -22  -23  -24\[ \t\r\n\]+-25  -26  -27  -28  -29  -30  -31  -32\[ \t\r\n\]+-33  -34  -35  -36  -37  -38  -39  -40\[ \t\r\n\]+-41  -42  -43  -44  -45  -46  -47  -48\[ \t\r\n\]+-49\[ \t\r\n\]+\[ \t\r\n\]+array_c :\[ \t\r\n\]+=========\[ \t\r\n\]+\[ \t\r\n\]+Z\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZ\[ \t\r\n\]+aZaZaZaZaZaZaZaZaZa\[ \t\r\n\]+\[ \t\r\n\]+array_f :\[ \t\r\n\]+=========\[ \t\r\n\]+\[ \t\r\n\]+0.000000\[ \t\r\n\]+0.142450  0.284900  0.427350  0.569801  0.712251  0.854701  0.997151  1.139601\[ \t\r\n\]+1.282051  1.424501  1.566952  1.709402  1.851852  1.994302\[ \t\r\n\]+\[ \t\r\n\]+array_d :\[ \t\r\n\]+=========\[ \t\r\n\]+\[ \t\r\n\]+0.000000\[ \t\r\n\]+23.456700  46.913400  70.370100  93.826800  117.283500  140.740200  164.196900  187.653600\[ \t\r\n\]+211.110300  234.567000  258.023700  281.480400  304.937100  328.393800  351.850500  375.307200\[ \t\r\n\]+398.763900  422.220600  445.677300  469.134000  492.590700  516.047400  539.504100  562.960800\[ \t\r\n\]+586.41750  609.874200  633.330900  656.787600  680.244300  703.701000  727.157700  750.614400\[ \t\r\n\]+774.071100  797.527800  820.984500  844.441200  867.897900  891.354600  914.811300  938.268000\[ \t\r\n\]+961.724700  985.181400  1008.638100  1032.094800  1055.551500  1079.008200  1102.464900  1125.921600\[ \t\r\n\]+1149.378300  1172.835000  1196.291700  1219.748400  1243.205100  1266.661800  1290.118500  1313.575200\[ \t\r\n\]+1337.031900  1360.488600  1383.945300  1407.402000  1430.858700  1454.315400  1477.772100  1501.228800\[ \t\r\n\]+1524.685500  1548.142200  1571.598900  1595.055600  1618.512300  1641.969000  1665.425700  1688.882400\[ \t\r\n\]+1712.339100  1735.795800  1759.252500  1782.709200  1806.165900  1829.622600  1853.079300  1876.536000\[ \t\r\n\]+1899.992700  1923.449400  1946.906100  1970.362800  1993.819500  2017.276200  2040.732900  2064.189600\[ \t\r\n\]+2087.646300  2111.103000  2134.559700  2158.016400  2181.473100  2204.929800  2228.386500  2251.843200\[ \t\r\n\]+2275.299900  2298.756600  2322.213300.*$gdb_prompt $" {
#        pass "print print_all_arrays(integer_array, char_array, float_array, double_array)"
#   }
#    -re ".*$gdb_prompt $" { fail "print print_all_arrays(integer_array, char_array, float_array, double_array)" }
#    timeout           { fail "(timeout) print print_all_arrays(integer_array, char_array, float_array, double_array)" }
#  }

#set timeout $oldtimeout
#go -until 1220
gdb_test "tbreak 1220" \
	"Temporary breakpoint.* file .*$srcfile, line 1220.*" \
	"tbreakpoint line 1220"

if {![gdb_skip_float_test "continuing to breakpoint 1220"] && \
    ![gdb_skip_stdio_test "continuing to breakpoint 1220"] } {
    gdb_test_sequence "continue" "continuing to breakpoint 1220" {
	"Continuing\\."
	"\[ \t\r\n\]+array_d :"
	"\[ \t\r\n\]+========="
	"\[ \t\r\n\]+0.000000"
	"\[ \t\r\n\]+23.456\[0-9\]*  46.913\[0-9\]*  70.370\[0-9\]*  93.826\[0-9\]*  117.283\[0-9\]*  140.740\[0-9\]*  164.196\[0-9\]*  187.653\[0-9\]*"
	"\[ \t\r\n\]+"
	"array_f :"
	"student id :\[\t \]+.*YELLOW"
	"array_i :"
	"main \\(\\) at .*call-ar-st.c:1220\[ \t\r\n\]+.*print_all_arrays\\(integer_array, char_array, float_array, double_array\\)."
    }
} else {
    gdb_test "continue" ".*" ""
}

#step
gdb_test "step" \
    "print_all_arrays \\(array_i=<integer_array.*>, array_c=<char_array.*> .ZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZaZa., array_f=<float_array.*>, array_d=<double_array.*>\\) at .*call-ar-st.c:306\[ \t\r\n\]+306.*print_int_array\\(array_i\\);.*" \
    "step inside print_all_arrays"

#step -over
if ![gdb_skip_stdio_test "next over print_int_array in print_all_arrays"] {
    gdb_test "next" \
	"array_i :.*307.*print_char_array.*" \
	"next over print_int_array in print-all_arrays"
} else {
    gdb_test "next" ".*" ""
}

#call print_double_array(array_d)
if {![gdb_skip_float_test "print print_double_array(array_d)"] && \
    ![gdb_skip_stdio_test "print print_double_array(array_d)"] } {
    gdb_test_sequence "print print_double_array(array_d)" "" {
	"array_d :"
	"\[ \t\r\n\]+========="
	"\[ \t\r\n\]+\[ \t\r\n\]+0.000000"
	"\[ \t\r\n\]+23.456\[0-9\]*  46.913\[0-9\]*  70.370\[0-9\]*  93.826\[0-9\]*  117.283\[0-9\]*  140.740\[0-9\]*  164.196\[0-9\]*  187.653\[0-9\]*"
	"\[ \t\r\n\]+"
    }
}

#go -until 1236
gdb_test "tbreak 1236" \
"Temporary breakpoint.* file .*$srcfile, line 1236.*" \
"tbreakpoint line 1236"

if {![gdb_skip_float_test "continuing to 1236"] && \
    ![gdb_skip_stdio_test "continuing to 1236"] } {
    gdb_test_sequence "continue" "continuing to 1236" {
	"Continuing\\..*array_c"
	"array_f"
	"\[ \t\r\n\]+array_d :"
	"\[ \t\r\n\]+========="
	"\[ \t\r\n\]+0.000000"
	"\[ \t\r\n\]+23.456\[0-9\]*  46.913\[0-9\]*  70.370\[0-9\]*  93.826\[0-9\]*  117.283\[0-9\]*  140.740\[0-9\]*  164.196\[0-9\]*  187.653\[0-9\]*"
	"\[ \t\r\n\]+.*HELLO WORLD.*main \\(\\) at .*call-ar-st.c:1236.*printf\\(.BYE BYE FOR NOW.n.\\)."
    }
} else {
    gdb_test "continue" ".*" ""
}


#call sum_array_print(10, *list1, *list2, *list3, *list4)

if ![gdb_skip_stdio_test "print sum_array_print(...)"] {
    gdb_test "print sum_array_print(10, *list1, *list2, *list3, *list4)" \
	".*Sum of 4 arrays, by element \\(add in seed as well\\):\[ \t\r\n\]+Seed: 10\[ \t\r\n\]+Element Index . Sum\[ \t\r\n\]+-------------------------\[ \t\r\n\]+.*\[ \t\]+0\[ \t\]+52\[ \t\r\n\]+1\[ \t\]+60\[ \t\r\n\]+2\[ \t\]+68\[ \t\r\n\]+3\[ \t\]+76\[ \t\r\n\]+4\[ \t\]+84\[ \t\r\n\]+5\[ \t\]+92\[ \t\r\n\]+6\[ \t\]+100\[ \t\r\n\]+7\[ \t\]+108\[ \t\r\n\]+8\[ \t\]+116\[ \t\r\n\]+9\[ \t\]+124\[ \t\r\n\]+.*" \
	"print sum_array_print(10, *list1, *list2, *list3, *list4)"
}

#step over
if ![gdb_skip_stdio_test "next to 1237"] {
    gdb_test "next" \
	"BYE BYE FOR NOW.*1237.*printf\\(.VERY GREEN GRASS.n.\\);.*" \
	"next to 1237"
} else {
    gdb_test "next" ".*" ""
}

#call print_array_rep(\*list1, \*list2, \*list3)

if ![gdb_skip_stdio_test "print print_array_rep(...)"] {
    gdb_test "print print_array_rep(\*list1, \*list2, \*list3)" \
	"Contents of linked list3:.*" \
	"print print_array_rep(*list1, *list2, *list3)"
}

#go -until 1241
gdb_test "tbreak 1241" \
    "Temporary breakpoint..* file .*$srcfile, line 1241.*" \
    "tbreakpoint line 1241"

gdb_test "continue" \
    "main \\(\\) at .*call-ar-st.c:1241\r\n1241\[\t \]+sum_array_print\\(10, \\*list1, \\*list2, \\*list3, \\*list4\\);.*" \
    "continue to 1241"


# Run into sum_array_print, and verify that the arguments were passed
# accurately.
#
# Note that we shouldn't use a `step' here to get into
# sum_array_print; GCC may emit calls to memcpy to put the arguments
# in the right place, and a step may end up in memcpy instead.  This
# may itself be a bug, but it's not the one we're trying to catch
# here.  I've added something to step-test.exp for this.
gdb_test "break sum_array_print" \
	".*Breakpoint ${decimal}: file .*call-ar-st.c, line.*" \
	"set breakpoint in sum_array_print"
gdb_test_no_output "set print frame-arguments all"
gdb_test "continue" \
	".*Breakpoint ${decimal}, sum_array_print \\(seed=10, linked_list1=.next_index = .1, 2, 3, 4, 5, 6, 7, 8, 9, 10., values = .4, 6, 8, 10, 12, 14, 16, 18, 20, 22., head = 0., linked_list2=.next_index = .1, 2, 3, 4, 5, 6, 7, 8, 9, 10., values = .8, 10, 12, 14, 16, 18, 20, 22, 24, 26., head = 0., linked_list3=.next_index = .1, 2, 3, 4, 5, 6, 7, 8, 9, 10., values = .10, 12, 14, 16, 18, 20, 22, 24, 26, 28., head = 0., linked_list4=.next_index = .1, 2, 3, 4, 5, 6, 7, 8, 9, 10., values = .20, 22, 24, 26, 28, 30, 32, 34, 36, 38., head = 0.\\) at .*call-ar-st.c:1105\[ \t\n\r\]+1105.*printf\\(.Sum of 4 arrays, by element \\(add in seed as well\\).*\\);.*" \
	"check args of sum_array_print"

#call print_array_rep(linked_list1, linked_list2, linked_list3)
# this calls works from gdb without gdb_expect. But it does seem to hang
#from within gdb_expect.
#I comment this out
#send_gdb "print print_array_rep(linked_list1, linked_list2, linked_list3)\n"
#gdb_expect {
#    -re ".*Contents of linked list1:\[ \t\n\r\]+Element Value . Index of Next Element\[ \t\n\r\]+-------------------------------------\[ \t\n\r\]+.*\[ \t\n\r\]+.*4.*1\[ \t\n\r\]+.*6.*2\[ \t\n\r\]+.*8.*3\[ \t\n\r\]+.*10.*4\[ \t\n\r\]+.*12.*5\[ \t\n\r\]+.*14.*6\[ \t\n\r\]+.*16.*7\[ \t\n\r\]+.*18.*8\[ \t\n\r\]+.*20.*9\[ \t\n\r\]+.*22.*10\[ \t\n\r\]+Contents of linked list2:\[ \t\n\r\]+Element Value | Index of Next Element\[ \t\n\r\]+-------------------------------------\[ \t\n\r\]+.*\[ \t\n\r\]+.*8.*1\[ \t\n\r\]+.*10.*2\[ \t\n\r\]+.*12.*3\[ \t\n\r\]+.*14.*4\[ \t\n\r\]+.*16.*5\[ \t\n\r\]+.*18.*6\[ \t\n\r\]+.*20.*7\[ \t\n\r\]+.*22.*8\[ \t\n\r\]+.*24.*9\[ \t\n\r\]+.*26.*10\[ \t\n\r\]+Contents of linked list3:\[ \t\n\r\]+Element Value | Index of Next Element\[ \t\n\r\]+-------------------------------------\[ \t\n\r\]+.*\[ \t\n\r\]+.*10.*1\[ \t\n\r\]+.*12.*2\[ \t\n\r\]+.*14.*3\[ \t\n\r\]+.*16.*4\[ \t\n\r\]+.*18.*5\[ \t\n\r\]+.*20.*6\[ \t\n\r\]+.*22.*7\[ \t\n\r\]+.*24.*8\[ \t\n\r\]+.*26.*9\[ \t\n\r\]+.*28.*10\[ \t\n\r\]+.*$gdb_prompt $" {
#        pass "print print_array_rep(linked_list1, linked_list2, linked_list3)"
#      }
#    -re ".*$gdb_prompt $" { fail "print print_array_rep(linked_list1, linked_list2, linked_list3)" }
#    timeout           { fail "(timeout) print print_array_rep(linked_list1, linked_list2, linked_list3)" }
#}


#go -until 1281
gdb_test "tbreak 1281" \
    "Temporary breakpoint.* file .*call-ar-st.c, line 1281.*" \
    "tbreakpoint line 1281"

if ![gdb_skip_stdio_test "continuing to 1281"] {
    gdb_test "continue" \
	"Continuing\\..*Sum of 4 arrays.*Contents of linked list1.*Contents of two_floats_t.*main \\(\\) at .*call-ar-st.c:1281.*c = 0.*" \
	"continue to 1281"
} else {
    gdb_test "continue" ".*" ""
}

#call print_small_structs(*struct1, *struct2, *struct3, *struct4, 
#                         *flags, *flags_combo, *three_char, *five_char, 
#                         *int_char_combo, *d1, *d2, *d3, *f1, *f2, *f3)

if {![gdb_skip_float_test "print print_small_structs(...)"] && \
    ![gdb_skip_stdio_test "print print_small_structs(...)"] } {
    gdb_test_sequence "print print_small_structs(*struct1, *struct2, *struct3, *struct4, *flags, *flags_combo, *three_char, *five_char, *int_char_combo, *d1, *d2, *d3, *f1, *f2, *f3)" "print print_small_structs" {
	"\[\t\r\n \]+alpha"
	"\[\t\r\n \]+gamma"
	"\[\t\r\n \]+epsilon"
	"\[\t\r\n \]+alpha"
	"\[\t\r\n \]+gamma"
	"\[\t\r\n \]+epsilon"
	"\[\t\r\n \]+ch1: y[ \t]*ch2: n"
	"\[\t\r\n \]+Contents of three_char_t:"
	"\[\t\r\n \]+a[ \t]*b[ \t]*c"
	"\[\t\r\n \]+Contents of five_char_t:"
	"\[\t\r\n \]+l[ \t]*m[ \t]*n[ \t]*o[ \t]*p"
	"\[\t\r\n \]+Contents of int_char_combo_t:"
	"\[\t\r\n \]+123[ \t]*z"
	"\[\t\r\n \]+Sum of the 4 struct values and seed :"
	"\[\t\r\n \]+52"
	"\[\t\r\n \]+Contents of struct1:"
	"\[\t\r\n \]+6[ \t]*0"
	"\[\t\r\n \]+Contents of struct2:"
	"\[\t\r\n \]+10[ \t]*0"
	"\[\t\r\n \]+Contents of struct3:"
	"\[\t\r\n \]+12[ \t]*0"
	"\[\t\r\n \]+Contents of one_double_t:"
	"\[\t\r\n \]+10.500000"
	"\[\t\r\n \]+Contents of one_double_t:"
	"\[\t\r\n \]+-3.375000"
	"\[\t\r\n \]+Contents of one_double_t:"
	"\[\t\r\n \]+675.093750"
	"\[\t\r\n \]+Contents of two_floats_t:"
	"\[\t\r\n \]+45.234001[ \t]*43.599998"
	"\[\t\r\n \]+Contents of two_floats_t:"
	"\[\t\r\n \]+78.010002[ \t]*122.099998"
	"\[\t\r\n \]+Contents of two_floats_t:"
	"\[\t\r\n \]+-1232.344971[ \t]*-199.210007"
    }
}

#call compute_with_small_structs(20)
gdb_test "print compute_with_small_structs(20)" \
    "\[0-9\]+ = void" \
    "print compute_with_small_structs(20)"


#call print_ten_doubles(123.456, 123.456, -0.12, -1.23, 343434.8, 89.098, 
#                       3.14, -5678.12345, -0.11111111, 216.97065)

if {![gdb_skip_float_test "print print_ten_doubles(...)"] && \
    ![gdb_skip_stdio_test "print print_ten_doubles(...)"]} {
    gdb_test_sequence "print print_ten_doubles(123.456, 123.456, -0.12, -1.23, 343434.8, 89.098, 3.14, -5678.12345, -0.11111111, 216.97065)" "print print_ten_doubles" {
	"\[\t\r\n \]+Two Doubles : 123.45\[0-9\]*.*123.45\[0-9\]*"
	"\[\t\r\n \]+Two Doubles : -0.1200\[0-9\]*.*-1.2300\[0-9\]*"
	"\[\t\r\n \]+Two Doubles : 343434.\[0-9\]*.*89.09\[0-9\]*"
	"\[\t\r\n \]+Two Doubles : 3.1400\[0-9\]*.*-5678.123\[0-9\]*"
	"\[\t\r\n \]+Two Doubles : -0.1111\[0-9\]*.*216.97\[0-9\]*"
    }
}

#go -until 1286
gdb_test "tbreak 1286" \
    "Temporary breakpoint .* file .*call-ar-st.c, line 1286.*" \
    "tbreakpoint line 1286"

gdb_test continue "Continuing\\..*main \\(.*\\) at.*call-ar-st.c:1286\[\t\r\n \]+1286.*print_long_arg_list \\( a, b, c, d, e, f, .struct1, .struct2, .struct3, .struct4,.*" "continue to 1286"

if { [istarget "hppa*-*-hpux*"] } {
    #
    # NOTE:(FIXME)
    # the aCC demangler cannot demangle the name of a function with >10 args.
    # so I added a .* after the name of the function, to match the
    # incredibly long mangled name 
    # (getting aCC's libdemangle.a bundled w/ the system?)
    # DTS CLLbs16994  coulter 990114
    # 
    # FIXME: use step for hppa* testing for now
    # guo 990621
    #
    gdb_test "step" \
	"print_long_arg_list.*\\(a=22.25, b=33.375, c=0, d=-25, e=100, f=2345, struct1=\{value = 6, head = 0\}, struct2=\{value = 10, head = 0\}, struct3=\{value = 12, head = 0\}, struct4=\{value = 14, head = 0\}, flags=\{alpha = 1, beta = 0, gamma = 1, delta = 0, epsilon = 1, omega = 0\}, flags_combo=\{alpha = 1, beta = 0, ch1 = 121 \'y\', gamma = 1, delta = 0, ch2 = 110 \'n\', epsilon = 1, omega = 0\}, three_char=\{ch1 = 97 \'a\', ch2 = 98 \'b\', ch3 = 99 \'c\'\}, five_char=\{ch1 = 108 \'l\', ch2 = 109 \'m\', ch3 = 110 \'n\', ch4 = 111 \'o\', ch5 = 112 \'p\'\}, int_char_combo=\{int1 = 123, ch1 = 122 \'z\'\}, d1=\{double1 = 10.5\}, d2=\{double1 = -3.375\}, d3=\{double1 = 675.09375\}, f1=\{float1 = 45.2340012, float2 = 43.5999985\}, f2=\{float1 = 78.0100021, float2 = 122.099998\}, f3=\{float1 = -1232.34497, float2 = -199.210007\}\\) at .*${srcfile}:992\[\r\n\]+992\[ \t\]+printf\\(\"double :.*\", a\\);" \
	"step into print_long_arg_list"
} else {

    # We can't just assume that a "step" will get us into
    # print_long_arg_list here,either.
    gdb_test "tbreak print_long_arg_list" \
	"Temporary breakpoint .* file .*call-ar-st.c, line .*" \
	"tbreak in print_long_arg_list after stepping into memcpy"
    # The short match case below handles cases where a buffer
    # overflows or something, and expect can't deal with the full
    # line.  Perhaps a more elegant solution exists... -sts 1999-08-17
    if {![gdb_skip_float_test "step into print_long_arg_list"]} {
	gdb_test_multiple "continue" "step into print_long_arg_list" {
	    -re ".*print_long_arg_list \\(a=22.25, b=33.375, c=0, d=-25, e=100, f=2345, struct1=\{value = 6, head = 0\}, struct2=\{value = 10, head = 0\}, struct3=\{value = 12, head = 0\}, struct4=\{value = 14, head = 0\}, flags=\{alpha = 1, beta = 0, gamma = 1, delta = 0, epsilon = 1, omega = 0\}, flags_combo=\{alpha = 1, beta = 0, ch1 = 121 \'y\', gamma = 1, delta = 0, ch2 = 110 \'n\', epsilon = 1, omega = 0\}, three_char=\{ch1 = 97 \'a\', ch2 = 98 \'b\', ch3 = 99 \'c\'\}, five_char=\{ch1 = 108 \'l\', ch2 = 109 \'m\', ch3 = 110 \'n\', ch4 = 111 \'o\', ch5 = 112 \'p\'\}, int_char_combo=\{int1 = 123, ch1 = 122 \'z\'\}, d1=\{double1 = 10.5\}, d2=\{double1 = -3.375\}, d3=\{double1 = 675.09375\}, f1=\{float1 = 45.2340012, float2 = 43.5999985\}, f2=\{float1 = 78.0100021, float2 = 122.099998\}, f3=\{float1 = -1232.34497, float2 = -199.210007\}\\) at .*${srcfile}:992\[\r\n\]+992\[ \t\]+printf\\(\"double :.*\", a\\);.*$gdb_prompt $" {
		pass "step into print_long_arg_list"
	    }
	    -re ".*print_long_arg_list.*\\(a=22.25, b=33.375, c=0, d=-25, e=100, f=2345, struct1=\{value = 6, head = 0\}, struct2=\{value = 10, head = 0\}, struct3=\{value = 12, head = 0\}, struct4=\{value = 14, head = 0\}, flags=\{alpha = 1, beta = 0, gamma = 1, delta = 0, epsilon = 1, omega = 0\}, flags_combo=\{alpha = 1, beta = 0, ch1 = 121 \'y\', gamma = 1, delta = 0, ch2 = 110 \'n\', epsilon = 1, omega = 0\}, three_char=\{ch1 = 97 \'a\', ch2 = 98 \'b\', ch3 = 99 \'c\'\}.*\\) at .*${srcfile}:992\[\r\n\]+992\[ \t\]+printf\\(\"double :.*\", a\\);.*$gdb_prompt $" {
		pass "step into print_long_arg_list (short match)"
	    }
	}
    } else {
	# If skipping float tests, don't expect anything in arg list.
	gdb_test "continue" \
	    "print_long_arg_list \\(.*\\).*" \
	    "step into print_long_arg_list"
    }
}

set ws "\[\n\r\t \]+"

#call print_small_structs(struct1, struct2, struct3, struct4, flags, 
#                         flags_combo, three_char, five_char, int_char_combo, 
#                         d1, d2, d3, f1, f2, f3)

if {![gdb_skip_float_test "print_small_structs from print_long_arg_list"] && \
    ![gdb_skip_stdio_test "print_small_structs from print_long_arg_list"] } {

    # On 32-bit SPARC, some of the args are passed by ref, others by
    # value, and GDB gets confused and says "Invalid cast" because it
    # thinks it has to cast the structure into a pointer to structure.
    if { [test_debug_format "stabs"] } then {
	setup_kfail "gdb/1539" "sparc-*-*"
    }

    gdb_test_sequence "print print_small_structs(struct1, struct2, struct3, struct4, flags, flags_combo, three_char, five_char, int_char_combo, d1, d2, d3, f1, f2, f3)" "print print_small_structs from print_long_arg_list" {
	"\[\t\r\n \]+alpha"
	"\[\t\r\n \]+gamma"
	"\[\t\r\n \]+epsilon"
	"\[\t\r\n \]+alpha"
	"\[\t\r\n \]+gamma"
	"\[\t\r\n \]+epsilon"
	"\[\t\r\n \]+ch1: y[ \t]*ch2: n"
	"\[\t\r\n \]+Contents of three_char_t:"
	"\[\t\r\n \]+a\[ \t\]*b\[ \t\]*c"
	"\[\t\r\n \]+Contents of five_char_t:"
	"\[\t\r\n \]+l\[ \t\]*m\[ \t\]*n\[ \t\]*o\[ \t\]*p"
	"\[\t\r\n \]+Contents of int_char_combo_t:"
	"\[\t\r\n \]+123\[ \t\]*z"
	"\[\t\r\n \]+Sum of the 4 struct values and seed :"
	"\[\t\r\n \]+52"
	"\[\t\r\n \]+Contents of struct1:"
	"\[\t\r\n \]+6\[ \t\]*0"
	"\[\t\r\n \]+Contents of struct2:"
	"\[\t\r\n \]+10\[ \t\]*0"
	"\[\t\r\n \]+Contents of struct3:"
	"\[\t\r\n \]+12\[ \t\]*0"
	"\[\t\r\n \]+Contents of one_double_t:"
	"\[\t\r\n \]+10.500000"
	"\[\t\r\n \]+Contents of one_double_t:"
	"\[\t\r\n \]+-3.375000"
	"\[\t\r\n \]+Contents of one_double_t:"
	"\[\t\r\n \]+675.093750"
	"\[\t\r\n \]+Contents of two_floats_t:"
	"\[\t\r\n \]+45.234001\[ \t\]*43.599998"
	"\[\t\r\n \]+Contents of two_floats_t:"
	"\[\t\r\n \]+78.010002\[ \t\]*122.099998"
	"\[\t\r\n \]+Contents of two_floats_t:"
	"\[\t\r\n \]+-1232.344971\[ \t\]*-199.210007"
    }
}


#go -until 1300
gdb_test "tbreak 1300" \
    "Temporary breakpoint.* file .*call-ar-st.c, line 1300.*" \
    "tbreakpoint line 1300"

if ![gdb_skip_stdio_test "continuing to 1300"] {
    gdb_test "continue" "Continuing\\..*Contents of two_floats_t:.*main \\(\\) at.*call-ar-st.c:1300.*1300.*init_bit_flags_combo\\(flags_combo, \\(unsigned\\)1, \\(unsigned\\)0, .y.,.*" \
	    "continue to 1300"
} else {
    gdb_test "continue" ".*" ""
}

#step
gdb_test "step" \
    "init_bit_flags_combo \\(bit_flags_combo=, a=1, b=0, ch1=121 .y., g=1, d=0, ch2=110 .n., e=1, o=0\\) at .*call-ar-st.c:416\[ \t\n\r\]+416.*bit_flags_combo->alpha = a;" \
    "step into init_bit_flags_combo"

#call print_bit_flags_combo(*bit_flags_combo)
if ![gdb_skip_stdio_test "continuing to 1300"] {
    gdb_test "print print_bit_flags_combo(*bit_flags_combo)" \
	"alpha.*gamma.*epsilon.*ch1: y.*ch2: n.*" \
	"print print_bit_flags_combo from init_bit_flags_combo"
}


#go -until 1305
gdb_test "tbreak 1305" \
    "Temporary breakpoint.* file .*call-ar-st.c, line 1305.*" \
    "tbreakpoint line 1305"

gdb_test continue "Continuing\\..*main \\(\\) at .*call-ar-st.c:1305\[\r\n\t \]+1305.*init_int_char_combo\\(int_char_combo, 13, .!.\\);" \
"continue to 1305"

#call print_long_arg_list(a, b, c, d, e, f, *struct1, *struct2, *struct3, *struct4, *flags, *flags_combo, *three_char, *five_char, *int_char_combo, *d1, *d2, *d3, *f1, *f2, *f3)

# FIXME:
# HP aCC demangler currently does not handle hp aCC functions with >10 args
# DTS CLLbs16994  coulter 990114

if {$hp_aCC_compiler} {setup_xfail "hppa*-*-*" CLLbs16994}

if {![gdb_skip_float_test "print print_long_arg_list"] && \
    ![gdb_skip_stdio_test "print print_long_arg_list"] } {
    gdb_test_sequence "print print_long_arg_list(a, b, c, d, e, f, *struct1, *struct2, *struct3, *struct4, *flags, *flags_combo, *three_char, *five_char, *int_char_combo, *d1, *d2, *d3, *f1, *f2, *f3)" "print print_long_arg_list" {
	"\[ \n\r\t\]+double : 22.250000"
	"\[ \n\r\t\]+double : 33.375000"
	"\[ \n\r\t\]+int : 0"
	"\[ \n\r\t\]+int : -25"
	"\[ \n\r\t\]+int : 100"
	"\[ \n\r\t\]+int : 2345"
	"\[ \n\r\t\]+alpha"
	"\[ \n\r\t\]+gamma"
	"\[ \n\r\t\]+epsilon"
	"\[ \n\r\t\]+ch1: y\[ \t\]+ch2: n"
	"\[ \n\r\t\]+Contents of three_char_t:"
	"\[ \n\r\t\]+x\[ \t\]+y\[ \t\]+z"
	"\[ \n\r\t\]+Contents of five_char_t:"
	"\[ \n\r\t\]+h\[ \t\]+e\[ \t\]+l\[ \t\]+l\[ \t\]+o"
	"\[ \n\r\t\]+Contents of int_char_combo_t:"
	"\[ \n\r\t\]+123\[ \t\]+z"
	"\[ \n\r\t\]+Sum of the 4 struct values and seed :"
	"\[ \n\r\t\]+52"
	"\[ \n\r\t\]+Contents of struct1:"
	"\[ \n\r\t\]+6\[ \t\]+0"
	"\[ \n\r\t\]+Contents of struct2:"
	"\[ \n\r\t\]+10\[ \t\]+0"
	"\[ \n\r\t\]+Contents of struct3:"
	"\[ \n\r\t\]+12\[ \t\]+0"
	"\[ \n\r\t\]+Contents of one_double_t:"
	"\[ \n\r\t\]+1.111110"
	"\[ \n\r\t\]+Contents of one_double_t:"
	"\[ \n\r\t\]+-345.340000"
	"\[ \n\r\t\]+Contents of one_double_t:"
	"\[ \n\r\t\]+546464.200000"
	"\[ \n\r\t\]+Contents of two_floats_t:"
	"\[ \n\r\t\]+0.234000\[ \t\]+453.100006"
	"\[ \n\r\t\]+Contents of two_floats_t:"
	"\[ \n\r\t\]+78.345001\[ \t\]+23.090000"
	"\[ \n\r\t\]+Contents of two_floats_t:"
	"\[ \n\r\t\]+-2.345000\[ \t\]+1.000000"
    }
}


#go -until 1311
gdb_test "tbreak 1311" \
    "Temporary breakpoint.* file .*call-ar-st.c, line 1311.*" \
    "tbreakpoint line 1311"

gdb_test continue "Continuing\\..*main \\(\\) at .*call-ar-st.c:1311\[ \t\n\r\]+1311.*compute_with_small_structs\\(35\\);" \
"continue to 1311"


#call sum_struct_print(10, *struct1, *struct2, *struct3, *struct4)
if ![gdb_skip_stdio_test "print sum_struct_print(...)"] {
    gdb_test "print sum_struct_print(10,*struct1,*struct2,*struct3,*struct4)" \
	"Sum of the 4 struct values and seed :\[ \t\n\r\]+218.*" \
	"print sum_struct_print(10, *struct1, *struct2, *struct3, *struct4)"
}


#call print_struct_rep(*struct1, *struct2, *struct3)
if ![gdb_skip_stdio_test "print print_struct_rep(...)"] {
    gdb_test_sequence "print print_struct_rep(*struct1, *struct2, *struct3)" \
	"print print_struct_rep(*struct1, *struct2, *struct3)" {
	"\[ \t\n\r\]+Contents of struct1:"
	"\[ \t\n\r\]+        22         0"
	"\[ \t\n\r\]+Contents of struct2:"
	"\[ \t\n\r\]+        42         0"
	"\[ \t\n\r\]+Contents of struct3:"
	"\[ \t\n\r\]+        62         0"
    }
}

if ![gdb_skip_stdio_test "print print_one_large_struct(...)"] {
    gdb_test "print print_one_large_struct(*list1)" \
	"         4         1.*" \
	"print print_one_large_struct(*list1)"
}

set timeout $oldtimeout
return

