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

# Tests of agent expression handling.

# The tests that use the maintenance command do not need tracepoint
# support on the target, but they do want a live program.

load_lib "trace-support.exp"


gdb_exit
gdb_start
standard_testfile actions.c

if ![gdb_trace_common_supports_arch] {
    unsupported "no trace-common.h support for arch"
    return -1
}

if { [gdb_compile "$srcdir/$subdir/$srcfile" $binfile \
	  executable {debug nowarnings}] != "" } {
    untested "failed to compile"
    return -1
}

gdb_load $binfile
runto_main
gdb_reinitialize_dir $srcdir/$subdir

gdb_test "maint agent 12" ".*const8 12.*pop.*end.*"

gdb_test "maint agent gdb_char_test" ""

gdb_test "maint agent gdb_arr_test\[12\]" ""

gdb_test "maint agent gdb_arr_test\[gdb_short_test\]" ""

gdb_test "maint agent gdb_struct1_test" ""

gdb_test "maint agent gdb_struct1_test.s" ""

gdb_test "maint agent gdb_struct1_test.arr\[gdb_struct1_test.c\]" ""

gdb_test "maint agent gdb_structp_test" ""

gdb_test "maint agent gdb_structp_test->l" ""

gdb_test "maint agent gdb_structp_test->bfield" ""

gdb_test "maint agent gdb_long_test + gdb_short_test" ""

gdb_test "maint agent gdb_long_test - gdb_short_test" ""

gdb_test "maint agent gdb_long_test * gdb_short_test" ""

gdb_test "maint agent gdb_long_test / gdb_short_test" ""

gdb_test "maint agent gdb_structp_test + 1" ""

gdb_test "maint agent gdb_long_test == gdb_short_test" ""

gdb_test "maint agent gdb_long_test != gdb_short_test" ""

gdb_test "maint agent gdb_long_test < gdb_short_test" ""

gdb_test "maint agent gdb_long_test <= gdb_short_test" ""

gdb_test "maint agent gdb_long_test > gdb_short_test" ""

gdb_test "maint agent gdb_long_test >= gdb_short_test" ""

gdb_test "maint agent &gdb_long_test == &gdb_short_test" ""

gdb_test "maint agent &gdb_long_test < &gdb_short_test" ""

gdb_test "maint agent (unsigned char)1L" ".*const.* 1.*"

# Now test eval version of agent expressions.

gdb_test "maint agent-eval 12" ".*const8 12.*end.*"

gdb_test "maint agent-eval gdb_char_test" ""

gdb_test "maint agent-eval gdb_arr_test\[12\]" ""

gdb_test "maint agent-eval gdb_arr_test\[gdb_short_test\]" ""

gdb_test "maint agent-eval gdb_struct1_test" ""

gdb_test "maint agent-eval gdb_struct1_test.s" ""

gdb_test "maint agent-eval gdb_struct1_test.arr\[gdb_struct1_test.c\]" ""

gdb_test "maint agent-eval gdb_structp_test" ""

gdb_test "maint agent-eval gdb_structp_test->l" ""

gdb_test "maint agent-eval gdb_structp_test->bfield" ""

gdb_test "maint agent-eval gdb_long_test + gdb_short_test" ""

gdb_test "maint agent-eval gdb_long_test - gdb_short_test" ""

gdb_test "maint agent-eval gdb_long_test * gdb_short_test" ""

gdb_test "maint agent-eval gdb_long_test / gdb_short_test" ""

gdb_test "maint agent-eval gdb_structp_test + 1" ""

gdb_test "maint agent-eval gdb_long_test == gdb_short_test" ""

gdb_test "maint agent-eval gdb_long_test != gdb_short_test" ""

gdb_test "maint agent-eval gdb_long_test < gdb_short_test" ""

gdb_test "maint agent-eval gdb_long_test <= gdb_short_test" ""

gdb_test "maint agent-eval gdb_long_test > gdb_short_test" ""

gdb_test "maint agent-eval gdb_long_test >= gdb_short_test" ""

gdb_test "maint agent-eval &gdb_long_test == &gdb_short_test" ".*equal.*end.*"

gdb_test "maint agent-eval &gdb_long_test < &gdb_short_test" ""

