aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2023-12-07 09:47:16 +0100
committerJakub Jelinek <jakub@redhat.com>2023-12-07 09:47:16 +0100
commite5489faf8efa30d8548bb669c0a700c409068bce (patch)
tree5a53a9504eff475997caa70512b408bb10fbbdd8 /gcc
parentf74939bd539c87f669e35042f7bc7aa47f0c29eb (diff)
downloadgcc-e5489faf8efa30d8548bb669c0a700c409068bce.zip
gcc-e5489faf8efa30d8548bb669c0a700c409068bce.tar.gz
gcc-e5489faf8efa30d8548bb669c0a700c409068bce.tar.bz2
expr: Handle BITINT_TYPE in count_type_elements [PR112881]
The following testcaser ICEs during gimplification, because count_type_elements doesn't handle BITINT_TYPE. It should handle it like other integral types. 2023-12-07 Jakub Jelinek <jakub@redhat.com> PR middle-end/112881 * expr.cc (count_type_elements): Handle BITINT_TYPE like INTEGER_TYPE. * gcc.dg/bitint-50.c: New test.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/expr.cc1
-rw-r--r--gcc/testsuite/gcc.dg/bitint-50.c21
2 files changed, 22 insertions, 0 deletions
diff --git a/gcc/expr.cc b/gcc/expr.cc
index fea7190..6da51f2 100644
--- a/gcc/expr.cc
+++ b/gcc/expr.cc
@@ -7021,6 +7021,7 @@ count_type_elements (const_tree type, bool for_ctor_p)
case REFERENCE_TYPE:
case NULLPTR_TYPE:
case OPAQUE_TYPE:
+ case BITINT_TYPE:
return 1;
case ERROR_MARK:
diff --git a/gcc/testsuite/gcc.dg/bitint-50.c b/gcc/testsuite/gcc.dg/bitint-50.c
new file mode 100644
index 0000000..ea7820e
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/bitint-50.c
@@ -0,0 +1,21 @@
+/* PR middle-end/112881 */
+/* { dg-do compile { target bitint } } */
+/* { dg-options "-O2 -std=c23" } */
+
+struct S { _BitInt(64) b; };
+
+struct S
+foo (_BitInt(64) p)
+{
+ return (struct S) { p };
+}
+
+#if __BITINT_MAXWIDTH__ >= 3924
+struct T { _BitInt(3924) b; };
+
+struct T
+bar (_BitInt(3924) p)
+{
+ return (struct T) { p };
+}
+#endif