Increase size of main_type::nfields
authorTom Tromey <tromey@adacore.com>
Wed, 11 Jan 2023 19:42:40 +0000 (12:42 -0700)
committerTom Tromey <tromey@adacore.com>
Thu, 9 Feb 2023 14:55:34 +0000 (07:55 -0700)
commit1775f8b3804744c22611ed0c9fd2df4f5b4d8641
tree06c240bfc9fe68afe224cfc4e9bddc3e09e7850b
parent119f6cfbd0236c9684a8a12ff9241dc834418309
Increase size of main_type::nfields

main_type::nfields is a 'short', and has been for many years.  PR
c++/29985 points out that 'short' is too narrow for an enum that
contains more than 2^15 constants.

This patch bumps the size of 'nfields'.  To verify that the field
isn't directly used, it is also renamed.  Note that this does not
affect the size of main_type on x86-64 Fedora 36.  And, if it does
have a negative effect somewhere, it's worth considering that types
could be shrunk more drastically by using subclasses for the different
codes.

This is v2 of this patch, which has these changes:

* I changed nfields to 'unsigned', per Simon's request.  I looked at
  changing all the uses, but this quickly fans out into a very large
  patch.  (One additional tweak was needed, though.)

* I wrote a test case.  I discovered that GCC cannot compile a large
  enough C test case, so I resorted to using the DWARF assembler.
  This test doesn't reproduce the crash, but it does fail without the
  patch.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=29985
gdb/compile/compile-cplus-types.c
gdb/gdb-gdb.py.in
gdb/gdbtypes.h
gdb/testsuite/gdb.dwarf2/mega-enum.exp [new file with mode: 0644]