# Copyright 1998-2021 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 "failed to prepare" $testfile $srcfile {debug nowarnings nopie}]} {
    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\]+"

#
# 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_breakpoint "begin" qualified
    gdb_breakpoint "end" qualified
}

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

    # Frame arguments and their entry values are displayed correctly with
    # various values of "print entry-values" when a trace frame is
    # selected.

    gdb_test "tfind -1" ".*" ""
    gdb_test_no_output "set print entry-values only" ""
    gdb_test "tfind 0" \
	" \\(argc@entry=\[^,\]*, argi@entry=\[^,\]*, argf@entry=\[^,\]*, argd@entry=\[^,\]*, argstruct@entry=\[^,\]*, argarray@entry=\[^,\]*\\) .*" \
	"collect $msg: tfind 0 with entry-values only"

    gdb_test "tfind -1" ".*" ""
    gdb_test_no_output "set print entry-values both" ""
    gdb_test "tfind 0" \
	" \\(argc=\[^,\]*, argc@entry=\[^,\]*, argi=\[^,\]*, argi@entry=\[^,\]*, argf=\[^,\]*, argf@entry=\[^,\]*, argd=\[^,\]*, argd@entry=\[^,\]*, argstruct=\[^,\]*, argstruct@entry=\[^,\]*, argarray=\[^,\]*, argarray@entry=\[^,\]*\\) .*" \
	"collect $msg: tfind 0 with entry-values both"

    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" ".*" ""
