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

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

standard_testfile

if {[prepare_for_testing "failed to prepare" $testfile $srcfile 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
	}
    }
}

# gold/15021
# With -fdebug-types-section, Gold's .gdb_index entry for ZERO refers to the
# CU, but the CU doesn't use the TU (type unit) that defines ZERO.
# Thus gdb has to read in every TU for the CU.
gdb_test "p ZERO" "ZERO"
