# Copyright 1998, 2005, 2007, 2008, 2009, 2010, 2011
# 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/>.

load_lib "trace-support.exp"

if $tracelevel then {
	strace $tracelevel
}


set testfile "collection"
set srcfile ${testfile}.c
set executable $testfile
set binfile $objdir/$subdir/$executable

if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
	executable {debug nowarnings}] != "" } {
    untested collection.exp
    return -1
}

# Tests: 
# 1) $args
# 2) function args by name
# 3) $locs
# 4) function locals by name
# 5) $regs
# 6) registers by name ($sp, $fp?)
# 7) globals by name
# 8) expressions (lots of different kinds: local and global)

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

if [is_amd64_regs_target] {
    set fpreg "rbp"
    set spreg "rsp"
    set pcreg "rip"
} elseif [is_x86_like_target] {
    set fpreg "ebp"
    set spreg "esp"
    set pcreg "eip"
} else {
    set fpreg "fp"
    set spreg "sp"
    set pcreg "pc"
}

#
# Utility procs
#

proc test_register { reg test_id } {
    global cr
    global gdb_prompt

    gdb_test_multiple "print /x $reg" "" {
	-re "\\$\[0-9\]+ = \[x0\]+$cr$gdb_prompt $" {
	    fail "collect $test_id: collected $reg (zero)"
	}
	-re "\\$\[0-9\]+ = \[x0-9a-fA-F\]+$cr$gdb_prompt $" {
	    pass "collect $test_id: collected $reg"
	}
	-re "\[Ee\]rror.*$gdb_prompt $" {
	    fail "collect $test_id: collected $reg (error)"
	}
    }
}

proc prepare_for_trace_test {} {
    global executable

    clean_restart $executable

    runto_main

    gdb_test "break begin" ".*" ""
    gdb_test "break end" ".*" ""
}

proc run_trace_experiment { msg test_func } {
    global gdb_prompt

    gdb_test "continue" \
	".*Breakpoint \[0-9\]+, begin .*" \
	"collect $msg: advance to begin"

    set test "collect $msg: start trace experiment"
    gdb_test_multiple "tstart" "$test" {
	-re "^tstart\r\n$gdb_prompt $" {
	    pass "$test"
	}
    }

    gdb_test "continue" \
	    "Continuing.*Breakpoint \[0-9\]+, end.*" \
	    "collect $msg: run trace experiment"
    gdb_test "tstop" \
	    "\[\r\n\]+" \
	    "collect $msg: stop trace experiment"
    gdb_test "tfind start" \
	    "#0  $test_func .*" \
	    "collect $msg: tfind test frame"
}


#
# Test procs
#

proc gdb_collect_args_test { myargs msg } {
    global cr
    global gdb_prompt

    prepare_for_trace_test

    gdb_test "trace args_test_func" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "collect $msg: set tracepoint"
    gdb_trace_setactions "collect $msg: define actions" \
	    "" \
	    "collect $myargs" "^$"

    # Begin the test.
    run_trace_experiment $msg args_test_func

    gdb_test "print argc" \
	    "\\$\[0-9\]+ = 1 '.001'$cr" \
	    "collect $msg: collected arg char"
    gdb_test "print argi" \
	    "\\$\[0-9\]+ = 2$cr" \
	    "collect $msg: collected arg int"
    gdb_test "print argf" \
	    "\\$\[0-9\]+ = 3.\[23\]\[0-9\]*$cr" \
	    "collect $msg: collected arg float"
    gdb_test "print argd" \
	    "\\$\[0-9\]+ = 4.\[34\]\[0-9\]*$cr" \
	    "collect $msg: collected arg double"

    # struct arg as one of several args (near end of list)
    gdb_test "print argstruct.memberc" \
	    "\\$\[0-9\]+ = 101 'e'$cr" \
	    "collect $msg: collected arg struct member char"
    gdb_test "print argstruct.memberi" \
	    "\\$\[0-9\]+ = 102$cr" \
	    "collect $msg: collected arg struct member int"
    gdb_test "print argstruct.memberf" \
	    "\\$\[0-9\]+ = 103.\[23\]\[0-9\]*$cr" \
	    "collect $msg: collected arg struct member float"
    gdb_test "print argstruct.memberd" \
	    "\\$\[0-9\]+ = 104.\[34\]\[0-9\]*$cr" \
	    "collect $msg: collected arg struct member double"

    # array arg as one of several args (near end of list)

    # It isn't clear why is the test assuming the array's elements are
    # collected.  In C, an array as function parameters is a special
    # case; it's just a pointer into the caller's array, and as such,
    # that's what normally the debug info describes.  Maybe this was
    # originaly written for a compiler where array parameters were
    # really described as arrays in debug info.

    setup_xfail "*-*-*"
    gdb_test "print argarray\[0\]" \
	    "\\$\[0-9\]+ = 111$cr" \
	    "collect $msg: collected argarray #0"

    setup_xfail "*-*-*"
    gdb_test "print argarray\[1\]" \
	    "\\$\[0-9\]+ = 112$cr" \
	    "collect $msg: collected argarray #1"

    setup_xfail "*-*-*"
    gdb_test "print argarray\[2\]" \
	    "\\$\[0-9\]+ = 113$cr" \
	    "collect $msg: collected argarray #2"

    setup_xfail "*-*-*"
    gdb_test "print argarray\[3\]" \
	    "\\$\[0-9\]+ = 114$cr" \
	    "collect $msg: collected argarray #3"

    gdb_test "tfind none" \
	    "#0  end .*" \
	    "collect $msg: cease trace debugging"
}

proc gdb_collect_argstruct_test { myargs msg } {
    global cr
    global gdb_prompt

    prepare_for_trace_test

    gdb_test "trace argstruct_test_func" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "collect $msg: set tracepoint"
    gdb_trace_setactions "collect $msg: define actions" \
	    "" \
	    "collect $myargs" "^$"

    # Begin the test.
    run_trace_experiment $msg argstruct_test_func

    # struct argument as only argument
    gdb_test "print argstruct.memberc" \
	    "\\$\[0-9\]+ = 101 'e'$cr" \
	    "collect $msg: collected arg struct member char"
    gdb_test "print argstruct.memberi" \
	    "\\$\[0-9\]+ = 102$cr" \
	    "collect $msg: collected arg struct member int"
    gdb_test "print argstruct.memberf" \
	    "\\$\[0-9\]+ = 103.\[23\]\[0-9\]*$cr" \
	    "collect $msg: collected arg struct member float"
    gdb_test "print argstruct.memberd" \
	    "\\$\[0-9\]+ = 104.\[34\]\[0-9\]*$cr" \
	    "collect $msg: collected arg struct member double"

    gdb_test "tfind none" \
	    "#0  end .*" \
	    "collect $msg: cease trace debugging"
}


proc gdb_collect_argarray_test { myargs msg } {
    global cr
    global gdb_prompt

    prepare_for_trace_test

    gdb_test "trace argarray_test_func" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "collect $msg: set tracepoint"
    gdb_trace_setactions "collect $msg: define actions" \
	    "" \
	    "collect $myargs" "^$"

    # Begin the test.
    run_trace_experiment $msg argarray_test_func

    # array arg as only argument

    # It isn't clear why is the test assuming the array's elements are
    # collected.  In C, an array as function parameters is a special
    # case; it's just a pointer into the caller's array, and as such,
    # that's what normally the debug info describes.  Maybe this was
    # originaly written for a compiler where array parameters were
    # really described as arrays in debug info.

    setup_xfail "*-*-*"
    gdb_test "print argarray\[0\]" \
	    "\\$\[0-9\]+ = 111$cr" \
	    "collect $msg: collected argarray #0"

    setup_xfail "*-*-*"
    gdb_test "print argarray\[1\]" \
	    "\\$\[0-9\]+ = 112$cr" \
	    "collect $msg: collected argarray #1"

    setup_xfail "*-*-*"
    gdb_test "print argarray\[2\]" \
	    "\\$\[0-9\]+ = 113$cr" \
	    "collect $msg: collected argarray #2"

    setup_xfail "*-*-*"
    gdb_test "print argarray\[3\]" \
	    "\\$\[0-9\]+ = 114$cr" \
	    "collect $msg: collected argarray #3"

    gdb_test "tfind none" \
	    "#0  end .*" \
	    "collect $msg: cease trace debugging"
}


proc gdb_collect_locals_test { func mylocs msg } {
    global cr
    global gdb_prompt

    prepare_for_trace_test

    # Find the comment-identified line for setting this tracepoint.
    set testline 0
    gdb_test_multiple "list $func, +30" "collect $msg: find tracepoint line" {
	-re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" {
	    set testline $expect_out(1,string)
	    pass "collect $msg: find tracepoint line"
	}
	-re ".*$gdb_prompt " {
	    fail "collect $msg: find tracepoint line (skipping locals test)"
	    return
	}
	timeout {
	    fail "collect $msg: find tracepoint line (skipping locals test)"
	    return
	}
    }

    gdb_test "trace $testline" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "collect $msg: set tracepoint"
    gdb_trace_setactions "collect $msg: define actions" \
	    "" \
	    "collect $mylocs" "^$"

    # Begin the test.
    run_trace_experiment $msg $func

    gdb_test "print locc" \
	"\\$\[0-9\]+ = 11 '.\[a-z0-7\]+'$cr" \
	    "collect $msg: collected local char"
    gdb_test "print loci" \
	    "\\$\[0-9\]+ = 12$cr" \
	    "collect $msg: collected local int"
    gdb_test "print locf" \
	    "\\$\[0-9\]+ = 13.\[23\]\[0-9\]*$cr" \
	    "collect $msg: collected local float"
    gdb_test "print locd" \
	    "\\$\[0-9\]+ = 14.\[34\]\[0-9\]*$cr" \
	    "collect $msg: collected local double"

    gdb_test "print locst.memberc" \
	    "\\$\[0-9\]+ = 15 '.017'$cr" \
	    "collect $msg: collected local member char"
    gdb_test "print locst.memberi" \
	    "\\$\[0-9\]+ = 16$cr" \
	    "collect $msg: collected local member int"
    gdb_test "print locst.memberf" \
	    "\\$\[0-9\]+ = 17.\[67\]\[0-9\]*$cr" \
	    "collect $msg: collected local member float"
    gdb_test "print locst.memberd" \
	    "\\$\[0-9\]+ = 18.\[78\]\[0-9\]*$cr" \
	    "collect $msg: collected local member double"

    gdb_test "print locar\[0\]" \
	    "\\$\[0-9\]+ = 121$cr" \
	    "collect $msg: collected locarray #0"
    gdb_test "print locar\[1\]" \
	    "\\$\[0-9\]+ = 122$cr" \
	    "collect $msg: collected locarray #1"
    gdb_test "print locar\[2\]" \
	    "\\$\[0-9\]+ = 123$cr" \
	    "collect $msg: collected locarray #2"
    gdb_test "print locar\[3\]" \
	    "\\$\[0-9\]+ = 124$cr" \
	    "collect $msg: collected locarray #3"
	    

    gdb_test "tfind none" \
	    "#0  end .*" \
	    "collect $msg: cease trace debugging"
}

proc gdb_collect_registers_test { myregs } {
    global cr
    global gdb_prompt
    global fpreg
    global spreg
    global pcreg

    prepare_for_trace_test

    # We'll simply re-use the args_test_function for this test
    gdb_test "trace args_test_func" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "collect $myregs: set tracepoint"
    gdb_trace_setactions "collect $myregs: define actions" \
	    "" \
	    "collect $myregs" "^$"

    # Begin the test.
    run_trace_experiment $myregs args_test_func

    test_register "\$$fpreg" $myregs
    test_register "\$$spreg" $myregs
    test_register "\$$pcreg" $myregs

    gdb_test "tfind none" \
	    "#0  end .*" \
	    "collect $myregs: cease trace debugging"
}

proc gdb_collect_expression_test { func expr val msg } {
    global cr
    global gdb_prompt

    prepare_for_trace_test

    # Find the comment-identified line for setting this tracepoint.
    set testline 0
    gdb_test_multiple "list $func, +30" "collect $msg: find tracepoint line" {
	-re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" {
	    set testline $expect_out(1,string)
	    pass "collect $msg: find tracepoint line"
	}
	-re ".*$gdb_prompt " {
	    fail "collect $msg: find tracepoint line (skipping locals test)"
	    return
	}
	timeout {
	    fail "collect $msg: find tracepoint line (skipping locals test)"
	    return
	}
    }

    gdb_test "trace $testline" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "collect $msg: set tracepoint"
    gdb_trace_setactions "collect $msg: define actions" \
	    "" \
	    "collect $expr" "^$"

    # Begin the test.
    run_trace_experiment $msg $func

    gdb_test "print $expr" \
	    "\\$\[0-9\]+ = $val$cr" \
	    "collect $msg: got expected value '$val'"

    gdb_test "tfind none" \
	    "#0  end .*" \
	    "collect $msg: cease trace debugging"
}

proc gdb_collect_globals_test { } {
    global cr
    global gdb_prompt

    prepare_for_trace_test

    # Find the comment-identified line for setting this tracepoint.
    set testline 0
    gdb_test_multiple "list globals_test_func, +30" "collect globals: find tracepoint line" {
	-re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" {
	    set testline $expect_out(1,string)
	    pass "collect globals: find tracepoint line"
	}
	-re ".*$gdb_prompt " {
	    fail "collect globals: find tracepoint line (skipping global test)"
	    return
	}
	timeout {
	    fail "collect globals: find tracepoint line (skipping global test)"
	    return
	}
    }

    # Use use this to test collecting overlapping memory ranges
    # (making use of UNOP_MEMVAL, as objects don't usually overlap
    # other objects).  Note that globalarr2 should not be collected in
    # any other way so that a regression test below can be effective.

    set globalarr2_addr ""
    set test "get address of globalarr2"
    gdb_test_multiple "p /x &globalarr2" $test {
	-re " = (0x\[0-9a-f\]+)\r\n$gdb_prompt $" {
	    set globalarr2_addr $expect_out(1,string)
	    pass $test
	}
    }

    gdb_test "trace $testline" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "collect globals: set tracepoint"
    gdb_trace_setactions "collect globals: define actions" \
	    "" \
	    "collect globalc, globali, globalf, globald" "^$" \
	    "collect globalstruct, globalp, globalarr" "^$" \
	    "collect \{int \[4\]\}$globalarr2_addr" "^$" \
	    "collect \{int \[2\]\}$globalarr2_addr" "^$" \
	    "collect \{int \[4\]\}globalarr3" "^$"

    # Begin the test.
    run_trace_experiment "globals" globals_test_func

    gdb_test "print globalc" \
	    "\\$\[0-9\]+ = 71 'G'$cr" \
	    "collect globals: collected global char"
    gdb_test "print globali" \
	    "\\$\[0-9\]+ = 72$cr" \
	    "collect globals: collected global int"
    gdb_test "print globalf" \
	    "\\$\[0-9\]+ = 73.\[23\]\[0-9\]*$cr" \
	    "collect globals: collected global float"
    gdb_test "print globald" \
	    "\\$\[0-9\]+ = 74.\[34\]\[0-9\]*$cr" \
	    "collect globals: collected global double"

    gdb_test "print globalstruct.memberc" \
	    "\\$\[0-9\]+ = 81 'Q'$cr" \
	    "collect globals: collected struct char member"
    gdb_test "print globalstruct.memberi" \
	    "\\$\[0-9\]+ = 82$cr" \
	    "collect globals: collected struct member int"
    gdb_test "print globalstruct.memberf" \
	    "\\$\[0-9\]+ = 83.\[23\]\[0-9\]*$cr" \
	    "collect globals: collected struct member float"
    gdb_test "print globalstruct.memberd" \
	    "\\$\[0-9\]+ = 84.\[34\]\[0-9\]*$cr" \
	    "collect globals: collected struct member double"

    gdb_test "print globalp == &globalstruct" \
	    "\\$\[0-9\]+ = 1$cr" \
	    "collect globals: collected global pointer"

    gdb_test "print globalarr\[1\]" \
	    "\\$\[0-9\]+ = 1$cr" \
	    "collect globals: collected global array element #1"
    gdb_test "print globalarr\[2\]" \
	    "\\$\[0-9\]+ = 2$cr" \
	    "collect globals: collected global array element #2"
    gdb_test "print globalarr\[3\]" \
	    "\\$\[0-9\]+ = 3$cr" \
	    "collect globals: collected global array element #3"

    # Check that we didn't mess up sort&merging memory ranges to
    # collect.
    gdb_test "print globalarr2" \
	"\\$\[0-9\]+ = \\{0, 1, 2, 3\\}$cr" \
	"collect globals: collected global array 2"

    # GDB would internal error collecting UNOP_MEMVAL's whose address
    # expression wasn't an rvalue (that's regtested in the
    # corresponding 'collect' action above).  This just double checks
    # we actually did collect what we wanted.
    gdb_test "print globalarr3" \
	"\\$\[0-9\]+ = \\{3, 2, 1, 0\\}$cr" \
	"collect globals: collected global array 3"

    gdb_test "tfind none" \
	    "#0  end .*" \
	    "collect globals: cease trace debugging"
}

# Test that when we've collected all fields of a structure
# individually, we can print the whole structure in one go.
proc gdb_collect_global_in_pieces_test { } {
    global gdb_prompt

    prepare_for_trace_test

    # Find the comment-identified line for setting this tracepoint.
    set testline 0
    set msg "collect global in pieces: find tracepoint line"
    gdb_test_multiple "list globals_test_func, +30" "$msg" {
	-re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" {
	    set testline $expect_out(1,string)
	    pass "$msg"
	}
    }

    if {$testline == 0} {
	return
    }

    gdb_test "trace $testline" \
	"Tracepoint \[0-9\]+ at .*" \
	"collect global in pieces: set tracepoint"
    gdb_trace_setactions "collect global in pieces: define actions" \
	    "" \
	    "collect global_pieces.a, global_pieces.b" \
	    "^$"

    # Begin the test.
    run_trace_experiment "global in pieces" globals_test_func

    gdb_test "print /x global_pieces.a" " = 0x12345678" \
	"collect global in pieces: print piece a"
    gdb_test "print /x global_pieces.b" " = 0x87654321" \
	"collect global in pieces: print piece b"

    gdb_test "print /x global_pieces" " = \{a = 0x12345678, b = 0x87654321\}" \
	"collect global in pieces: print whole object"

    gdb_test "tfind none" "#0  end .*" \
	"collect global in pieces: cease trace debugging"
}

proc gdb_collect_return_test { } {
    global gdb_prompt

    prepare_for_trace_test

    # We'll simply re-use the args_test_function for this test
    gdb_test "trace args_test_func" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "collect \$_ret: set tracepoint"
    gdb_trace_setactions "collect \$_ret: define actions" \
	    "" \
	    "collect \$_ret" "^$"

    # Begin the test.
    run_trace_experiment \$_ret args_test_func

    # Since we can't guarantee that $_ret will give us the caller,
    # pass either way, but giving different messages.
    gdb_test_multiple "backtrace" "" {
	-re ".*#1 .* in main .*\r\n$gdb_prompt $" {
	    pass "collect \$_ret: backtrace lists main"
	}
	-re ".*#1 .* in ?? .*\r\n$gdb_prompt $" {
	    pass "collect \$_ret: backtrace not listing main"
	}
    }

    gdb_test "tfind none" \
	    "#0  end .*" \
	    "collect \$_ret: cease trace debugging"
}

proc gdb_collect_strings_test { func mystr myrslt mylim msg } {
    global hex
    global cr
    global gdb_prompt

    prepare_for_trace_test

    # Find the comment-identified line for setting this tracepoint.
    set testline 0
    gdb_test_multiple "list $func, +30" "collect $msg: find tracepoint line" {
	-re "\[\r\n\](\[0-9\]+)\[^\r\n\]+ Set_Tracepoint_Here .*$gdb_prompt" {
	    set testline $expect_out(1,string)
	    pass "collect $msg: find tracepoint line"
	}
	-re ".*$gdb_prompt " {
	    fail "collect $msg: find tracepoint line (skipping strings test)"
	    return
	}
	timeout {
	    fail "collect $msg: find tracepoint line (skipping strings test)"
	    return
	}
    }

    gdb_test "trace $testline" \
	    "Tracepoint \[0-9\]+ at .*" \
	    "collect $msg: set tracepoint"
    gdb_trace_setactions "collect $msg: define actions" \
	    "" \
	    "collect/s$mylim $mystr" "^$"

    # Begin the test.
    run_trace_experiment $msg $func

    gdb_test "print $mystr" \
	"\\$\[0-9\]+ = $hex \"$myrslt\".*$cr" \
	    "collect $msg: collected local string"

    gdb_test "tfind none" \
	    "#0  end .*" \
	    "collect $msg: cease trace debugging"
}

proc gdb_trace_collection_test {} {
    global fpreg
    global spreg
    global pcreg

    gdb_collect_args_test "\$args" \
	    "args collectively"
    gdb_collect_args_test "argc, argi, argf, argd, argstruct, argarray" \
	    "args individually"
    gdb_collect_argstruct_test "\$args" \
	    "argstruct collectively"
    gdb_collect_argstruct_test "argstruct" \
	    "argstruct individually"
    gdb_collect_argarray_test "\$args" \
	    "argarray collectively"
    gdb_collect_argarray_test "argarray" \
	    "argarray individually"
    gdb_collect_locals_test local_test_func "\$locals" \
	    "auto locals collectively"
    gdb_collect_locals_test local_test_func \
	    "locc, loci, locf, locd, locst, locar" \
	    "auto locals individually"
    gdb_collect_locals_test reglocal_test_func "\$locals" \
	    "register locals collectively"
    gdb_collect_locals_test reglocal_test_func \
	    "locc, loci, locf, locd, locst, locar" \
	    "register locals individually"
    gdb_collect_locals_test statlocal_test_func "\$locals" \
	    "static locals collectively"
    gdb_collect_locals_test statlocal_test_func \
	    "locc, loci, locf, locd, locst, locar" \
	    "static locals individually"
    gdb_collect_registers_test "\$regs"
    gdb_collect_registers_test "\$$fpreg, \$$spreg, \$$pcreg"
    gdb_collect_globals_test
    gdb_collect_global_in_pieces_test
    
    #
    # Expression tests:
    #
    # *x	(**x, ...)
    # x.y	(x.y.z, ...)
    # x->y	(x->y->z, ...)
    # x[2]	(x[2][3], ...) (const index)
    # x[y]	(x[y][z], ...) (index to be char, short, long, float, double)
    #  NOTE:
    #  We test the following operators by using them in an array index
    #  expression -- because the naked result of an operator is not really
    #  collected.  To be sure the operator was evaluated correctly on the
    #  target, we have to actually use the result eg. in an array offset
    #  calculation.
    # x[y +  z] (tests addition: y and z various combos of types, sclasses)
    # x[y -  z] (tests subtraction) (ditto)
    # x[y *  z] (tests multiplication) (ditto)
    # x[y /  z] (tests division) (ditto)
    # x[y %  z] (tests modulo division) (ditto)
    # x[y == z] (tests equality relation) (ditto)              UNSUPPORTED
    # x[y != z] (tests inequality relation) (ditto)            UNSUPPORTED
    # x[y >  z] (tests greater-than relation) (ditto)          UNSUPPORTED
    # x[y <  z] (tests less-than relation) (ditto)             UNSUPPORTED
    # x[y >= z] (tests greater-than-or-equal relation) (ditto) UNSUPPORTED
    # x[y <= z] (tests less-than-or-equal relation) (ditto)    UNSUPPORTED
    # x[y && z] (tests logical and) (ditto)                    UNSUPPORTED
    # x[y || z] (tests logical or) (ditto)                     UNSUPPORTED
    # x[y &  z] (tests binary and) (ditto)                     UNSUPPORTED
    # x[y |  z] (tests binary or) (ditto)                      UNSUPPORTED
    # x[y ^  z] (tests binary xor) (ditto)                     UNSUPPORTED
    # x[y ? z1 : z2] (tests ternary operator) (ditto)          UNSUPPORTED
    # x[y << z] (tests shift-left) (ditto)                     UNSUPPORTED
    # x[y >> z] (tests shift-right) (ditto)                    UNSUPPORTED
    # x[y =  z] (tests assignment operator) (ditto)            UNSUPPORTED
    # x[++y]    (tests pre-increment operator) (ditto)         UNSUPPORTED
    # x[--y]    (tests pre-decrement operator) (ditto)         UNSUPPORTED
    # x[y++]    (tests post-increment operator) (ditto)        UNSUPPORTED
    # x[y--]    (tests post-decrement operator) (ditto)        UNSUPPORTED
    # x[+y]     (tests unary plus) (ditto)
    # x[-y]     (tests unary minus) (ditto)
    # x[!y]     (tests logical not) (ditto)                    UNSUPPORTED
    # x[~y]     (tests binary not) (ditto)                     UNSUPPORTED
    # x[(y, z)] (tests comma expression) (ditto)
    # cast expr
    # stack data
    
    gdb_collect_expression_test globals_test_func \
	    "globalstruct.memberi"  "82"     "a.b"
    gdb_collect_expression_test globals_test_func \
	    "globalp->memberc"      "81 'Q'" "a->b"
    gdb_collect_expression_test globals_test_func \
	    "globalarr\[2\]"        "2"      "a\[2\]"
    gdb_collect_expression_test globals_test_func \
	    "globalarr\[l3\]"       "3"      "a\[b\]"
    gdb_collect_expression_test globals_test_func \
	    "globalarr\[l3 + l2\]"  "5"      "a\[b + c\]"
    gdb_collect_expression_test globals_test_func \
	    "globalarr\[l3 - l2\]"  "1"      "a\[b - c\]"
    gdb_collect_expression_test globals_test_func \
	    "globalarr\[l3 * l2\]"  "6"      "a\[b * c\]"
    gdb_collect_expression_test globals_test_func \
	    "globalarr\[l6 / l3\]"  "2"      "a\[b / c\]"
    gdb_collect_expression_test globals_test_func \
	    "globalarr\[l7 % l3\]"  "1"      "a\[b % c\]"
    gdb_collect_expression_test globals_test_func \
	    "globalarr\[+l1\]"      "1"      "a\[+b\]"
    gdb_collect_expression_test globals_test_func \
	    "globalarr\[-lminus\]"  "2"      "a\[-b\]"
    gdb_collect_expression_test globals_test_func \
	    "globalarr\[\(l6, l7\)\]" "7"    "a\[\(b, c\)\]"

    gdb_collect_return_test

    gdb_collect_strings_test strings_test_func "locstr" "abcdef" "" \
	    "local string"

    gdb_collect_strings_test strings_test_func "longloc" "how now brown c" 15 \
	    "long local string"

}

clean_restart $executable
runto_main

# We generously give ourselves one "pass" if we successfully
# detect that this test cannot be run on this target!
if { ![gdb_target_supports_trace] } then {
    pass "Current target does not support trace"
    return 1;
}

# Body of test encased in a proc so we can return prematurely.
gdb_trace_collection_test

# Finished!
gdb_test "tfind none" ".*" ""
