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

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

# This file is part of the gdb testsuite
#
# tests for whatis command on expressions.
# used in file eval.c. This flavor of whatis
# command performs evaluation of expressions w/o actually
# computing the value, but just the type
# of the result. It goes through the evaluate_subexp_standard
# with the EVAL_AVOID_SIDE_EFFECTS flag rather than EVAL_NORMAL
# 

#
# test running programs
#

if { [prepare_for_testing "failed to prepare" whatis-exp int-type.c {debug nowarnings}] } {
    return -1
}

#
# set it up at a breakpoint so we can play with the variable values
#

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

#
# test expressions with "int" types
#

gdb_test_no_output "set variable x=14" "set variable x=14"
gdb_test_no_output "set variable y=2" "set variable y=2"
gdb_test_no_output "set variable z=2" "set variable z=2"
gdb_test_no_output "set variable w=3" "set variable w=3"

gdb_test "print x" " = 14" "print value of x"
gdb_test "print y" " = 2" "print value of y"
gdb_test "print z" " = 2" "print value of z"
gdb_test "print w" " = 3" "print value of w"

gdb_test "whatis x+y" "type = int" "whatis value of x+y"
gdb_test "whatis x-y" "type = int" "whatis value of x-y"
gdb_test "whatis x*y" "type = int" "whatis value of x*y"
gdb_test "whatis x/y" "type = int" "whatis value of x/y"
gdb_test "whatis x%y" "type = int" "whatis value of x%y"
gdb_test "whatis x=y" "type = int" "whatis value of x=y"

gdb_test "whatis x+=2" "type = int" "whatis value of x+=2"
gdb_test "whatis ++x" "type = int" "whatis value of  ++x"
gdb_test "whatis --x" "type = int" "whatis value of  --x"
gdb_test "whatis x++" "type = int" "whatis value of  x++"
gdb_test "whatis x--" "type = int" "whatis value of  x--"

gdb_exit
return 0
