# This testcase is part of GDB, the GNU debugger.

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

set testfile "enumval"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if { [prepare_for_testing enumval.exp "enumval" "" {debug}] } {
    return -1
}

# Check the real contents.

set test "print e"
gdb_test_multiple $test $test {
    -re " = J\r\n$gdb_prompt $" {
	pass $test
    }
    -re " = 4294967295\r\n$gdb_prompt $" {
	if {[test_compiler_info {gcc-[0-3]-*}]
	    || [test_compiler_info {gcc-4-[0-6]-*}]} {
	    xfail $test
	} else {
	    fail $test
	}
    }
}

set test "print f"
gdb_test_multiple $test $test {
    -re " = K\r\n$gdb_prompt $" {
	pass $test
    }
    -re " = -1152921504606846976\r\n$gdb_prompt $" {
	if {[test_compiler_info {gcc-[0-3]-*}]
	    || [test_compiler_info {gcc-4-[0-6]-*}]} {
	    xfail $test
	} else {
	    fail $test
	}
    }
}

gdb_test "print J" "= J"

set test "print K"
gdb_test_multiple $test $test {
    -re " = K\r\n$gdb_prompt $" {
	pass $test
    }
    -re " = <optimized out>\r\n$gdb_prompt $" {
	if {[test_compiler_info {gcc-[0-3]-*}]
	    || [test_compiler_info {gcc-4-[0-6]-*}]} {
	    xfail $test
	} else {
	    fail $test
	}
    }
}
