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

Message ID ZboGVzhsLbQDIRGV@tucnak
State Unresolved
Headers
Series dwarf2out: Fix ICE on large _BitInt in loc_list_from_tree_1 [PR113637] |

Checks

Context Check Description
snail/gcc-patch-check warning Git am fail log

Commit Message

Jakub Jelinek Jan. 31, 2024, 8:35 a.m. UTC
  Hi!

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.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

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.


	Jakub
  

Comments

Richard Biener Jan. 31, 2024, 9:03 a.m. UTC | #1
On Wed, 31 Jan 2024, Jakub Jelinek wrote:

> Hi!
> 
> 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.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK

> 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.
> 
> --- gcc/dwarf2out.cc.jj	2024-01-24 13:11:21.132468150 +0100
> +++ gcc/dwarf2out.cc	2024-01-30 17:23:41.249054946 +0100
> @@ -19027,6 +19027,7 @@ loc_list_from_tree_1 (tree loc, int want
>  		&& ! 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))
>  	      {
> --- gcc/testsuite/gcc.dg/bitint-80.c.jj	2024-01-30 17:30:02.843696120 +0100
> +++ gcc/testsuite/gcc.dg/bitint-80.c	2024-01-30 17:32:33.301583203 +0100
> @@ -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]);
> +}
> 
> 	Jakub
> 
>
  

Patch

--- gcc/dwarf2out.cc.jj	2024-01-24 13:11:21.132468150 +0100
+++ gcc/dwarf2out.cc	2024-01-30 17:23:41.249054946 +0100
@@ -19027,6 +19027,7 @@  loc_list_from_tree_1 (tree loc, int want
 		&& ! 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))
 	      {
--- gcc/testsuite/gcc.dg/bitint-80.c.jj	2024-01-30 17:30:02.843696120 +0100
+++ gcc/testsuite/gcc.dg/bitint-80.c	2024-01-30 17:32:33.301583203 +0100
@@ -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]);
+}