# Copyright 2015-2020 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/>.
load_lib dwarf.exp

# Test GDB does not internal error on DWARF register number -1 which is invalid
# in DWARF.  clang-3.5.0-9.fc22.x86_64 produced it inside DW_AT_location.

# This test can only be run on targets which support DWARF-2 and use gas.
if {![dwarf2_support]} {
    return 0
}

standard_testfile .S main.c

# Make some DWARF for the test.
set asm_file [standard_output_file $srcfile]
Dwarf::assemble $asm_file {
    cu {} {
	compile_unit {
	    {low_pc [gdb_target_symbol main] DW_FORM_addr}
	    {high_pc [gdb_target_symbol main]+0x10000 DW_FORM_addr}
	} {
	    declare_labels integer_label

	    integer_label: DW_TAG_base_type {
		{DW_AT_byte_size 4 DW_FORM_sdata}
		{DW_AT_encoding  @DW_ATE_signed}
		{DW_AT_name      integer}
	    }

	    DW_TAG_subprogram {
		{name main}
		{DW_AT_external 1 flag}
		{low_pc [gdb_target_symbol main] DW_FORM_addr}
		{high_pc [gdb_target_symbol main]+0x10000 DW_FORM_addr}
	    } {
		DW_TAG_variable {
		    {DW_AT_name bregx}
			{DW_AT_type :$integer_label}
			{DW_AT_external 1 flag}
		    {DW_AT_location {
			DW_OP_bregx 0xffffffff 0
		    } SPECIAL_expr}
		}
	    }
	}
    }
}

if { [prepare_for_testing "failed to prepare" ${testfile} \
			  [list $srcfile2 $asm_file] {nodebug}] } {
    return -1
}

runto_main

# Variable 'bregx' needs to be inside main as for global symbols GDB does not
# support non-trivial DW_AT_location.  Former GDB printed internal error here.
gdb_test "p bregx"
