# Copyright 1998, 1999, 2007, 2008, 2009, 2010 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
# 

if $tracelevel then {
	strace $tracelevel
	}

#
# test running programs
#

if { [prepare_for_testing whatis-exp.exp 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
