# 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 to cover evaluate_subexp_standard with the EVAL_SKIP flag set.
# this happens for instance when there is short circuit evaluation in the && and ||
# operators, or in the non returned part of a (x ? y: z) expression.
# the part that is not evaluated is parsed and evaluated anyway, but with
# the EVAL_SKIP flag set
# 
# source file "int-type.c"
#


# Check to see if we have an executable to test.  If not, then either we
# haven't tried to compile one, or the compilation failed for some reason.
# In either case, just notify the user and skip the tests in this file.

standard_testfile int-type.c

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

if [get_compiler_info] {
    return -1
}

clean_restart ${binfile}


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

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 (0 && (x+y))" ".$decimal = $false" \
    "print value of (0 && (x+y))"

gdb_test "print (0 && (x-y))" ".$decimal = $false" \
    "print value of (0 && (x-y))"

gdb_test "print (0 && (x*y))" ".$decimal = $false" \
    "print value of (0 && (x*y))"

gdb_test "print (0 && (x/y))" ".$decimal = $false" \
    "print value of (0 && (x/y))"

gdb_test "print (0 && (x%y))" ".$decimal = $false" \
    "print value of (0 && (x%y))"

gdb_test "print (0 && (x&&y))" ".$decimal = $false" \
    "print value of (0 && (x&&y))"

gdb_test "print (0 && (x||y))" ".$decimal = $false" \
    "print value of (0 && (x||y))"

gdb_test "print (0 && (x&y))" ".$decimal = $false" \
    "print value of (0 && (x&y))"

gdb_test "print (0 && (x|y))" ".$decimal = $false" \
    "print value of (0 && (x|y))"

gdb_test "print (0 && (x^y))" ".$decimal = $false" \
    "print value of (0 && (x^y))"

gdb_test "print (0 && (x < y))" ".$decimal = $false" \
    "print value of (0 && (x < y))"

gdb_test "print (0 && (x <= y))" ".$decimal = $false" \
    "print value of (0 && (x <= y))"

gdb_test "print (0 && (x>y))" ".$decimal = $false" \
    "print value of (0 && (x>y))"

gdb_test "print (0 && (x>=y))" ".$decimal = $false" \
    "print value of (0 && (x>=y))"

gdb_test "print (0 && (x==y))" ".$decimal = $false" \
    "print value of (0 && (x==y))"

gdb_test "print (0 && (x!=y))" ".$decimal = $false" \
    "print value of (0 && (x!=y))"

gdb_test "print (0 && (x<<31))" ".$decimal = $false" \
    "print value of (0 && (x<<31))"

gdb_test "print (0 && (x>>31))" ".$decimal = $false" \
    "print value of (0 && (x>>31))"

gdb_test "print (0 && (!x))" ".$decimal = $false" \
    "print value of (0 && (!x))"

gdb_test "print (0 && (~x))" ".$decimal = $false" \
    "print value of (0 && (~x))"

gdb_test "print (0 && (-x))" ".$decimal = $false" \
    "print value of (0 && (-x))"

gdb_test "print (0 && (x++))" ".$decimal = $false" \
    "print value of (0 && (x++))"

gdb_test "print (0 && (++x))" ".$decimal = $false" \
    "print value of (0 && (++x))"

gdb_test "print (0 && (x--))" ".$decimal = $false" \
    "print value of (0 && (x--))"

gdb_test "print (0 && (--x))" ".$decimal = $false" \
    "print value of (0 && (--x))"

gdb_test "print (0 && (x+=7))" ".$decimal = $false" \
    "print value of (0 && (x+=7))"

gdb_test "print (0 && (x=y))" ".$decimal = $false" \
    "print value of (0 && (x=y))"


gdb_exit
return 0







