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

# Copyright 2012 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
	}
    }
}
