# Copyright 1998, 2005, 2007-2012 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"


standard_testfile
set executable $testfile

if {[prepare_for_testing $testfile.exp $testfile $srcfile {debug nowarnings}]} {
    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"

}

runto_main

if { ![gdb_target_supports_trace] } then {
    unsupported "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" ".*" ""
