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