dwarf2out: Fix ICE on large _BitInt in loc_list_from_tree_1 [PR113637]

This spot uses SCALAR_INT_TYPE_MODE which obviously ICEs for large/huge
BITINT_TYPE types which have BLKmode.  But such large BITINT_TYPEs certainly
don't fit into DWARF2_ADDR_SIZE either, so we can just assume it would be
false if type has BLKmode.

2024-01-31  Jakub Jelinek  <jakub@redhat.com>

	PR debug/113637
	* dwarf2out.cc (loc_list_from_tree_1): Assume integral types
	with BLKmode are larger than DWARF2_ADDR_SIZE.

	* gcc.dg/bitint-80.c: New test.
This commit is contained in:
Jakub Jelinek 2024-01-31 10:56:15 +01:00
parent 90ac839a47
commit 457d2b59b5
2 changed files with 16 additions and 0 deletions

View file

@ -19027,6 +19027,7 @@ loc_list_from_tree_1 (tree loc, int want_address,
&& ! DECL_IGNORED_P (loc)
&& (INTEGRAL_TYPE_P (TREE_TYPE (loc))
|| POINTER_TYPE_P (TREE_TYPE (loc)))
&& TYPE_MODE (TREE_TYPE (loc)) != BLKmode
&& (GET_MODE_SIZE (SCALAR_INT_TYPE_MODE (TREE_TYPE (loc)))
<= DWARF2_ADDR_SIZE))
{

View file

@ -0,0 +1,15 @@
/* PR debug/113637 */
/* { dg-do compile { target bitint } } */
/* { dg-options "-g -std=c23" } */
#if __BITINT_MAXWIDTH__ >= 639
typedef _BitInt(639) B;
#else
typedef _BitInt(63) B;
#endif
void
foo (B n)
{
extern void bar (int [][n]);
}