]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
dwarf2out: Fix ICE on large _BitInt in loc_list_from_tree_1 [PR113637]
authorJakub Jelinek <jakub@redhat.com>
Wed, 31 Jan 2024 09:56:15 +0000 (10:56 +0100)
committerJakub Jelinek <jakub@redhat.com>
Wed, 31 Jan 2024 09:56:15 +0000 (10:56 +0100)
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.

gcc/dwarf2out.cc
gcc/testsuite/gcc.dg/bitint-80.c [new file with mode: 0644]

index 2b723210f3404c799f40686a32eb395e46d86da1..4b09c353365e81a7ece103ff0b5b6ae58aa5ef2a 100644 (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))
              {
diff --git a/gcc/testsuite/gcc.dg/bitint-80.c b/gcc/testsuite/gcc.dg/bitint-80.c
new file mode 100644 (file)
index 0000000..0ad0935
--- /dev/null
@@ -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]);
+}