# Copyright 2023-2025 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"
