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

# Test a huge enum.  A colossal enum.  If you will, a mega enum.

load_lib dwarf.exp
require dwarf2_support

standard_testfile main.c mega-enum.S

set asm_file [standard_output_file $srcfile2]
Dwarf::assemble $asm_file {
    global srcfile

    cu {} {
	DW_TAG_compile_unit {
		{DW_AT_language @DW_LANG_C}
		{DW_AT_name	$srcfile}
		{DW_AT_comp_dir /tmp}
	} {
	    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	 int}
	    }

	    DW_TAG_enumeration_type {
		{DW_AT_name mega_enum}
		{DW_AT_type :$integer_label}
	    } {
		# In the past gdb used a 'short' for the field count.
		# But this fails if there are too many fields.	If the
		# field count here is too high, gas takes a long time;
		# so use a number that's just big enough.
		for {set i 0} {$i < 65538} {incr i} {
		    DW_TAG_enumerator {
			{DW_AT_name DEI_$i}
			{DW_AT_const_value $i DW_FORM_sdata}
		    }
		}
	    }
	}
    }
}

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

# The largest known Fermat prime.
gdb_test "print/d DEI_65537" " = 65537"
gdb_test "print (enum mega_enum) 65537" " = DEI_65537"
