From e5489faf8efa30d8548bb669c0a700c409068bce Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Thu, 7 Dec 2023 09:47:16 +0100 Subject: [PATCH] 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 PR middle-end/112881 * expr.cc (count_type_elements): Handle BITINT_TYPE like INTEGER_TYPE. * gcc.dg/bitint-50.c: New test. --- gcc/expr.cc | 1 + gcc/testsuite/gcc.dg/bitint-50.c | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/bitint-50.c diff --git a/gcc/expr.cc b/gcc/expr.cc index fea719028a16..6da51f2aca29 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 000000000000..ea7820eafd7b --- /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 -- 2.47.2