From: Jakub Jelinek Date: Thu, 7 Dec 2023 08:47:16 +0000 (+0100) Subject: expr: Handle BITINT_TYPE in count_type_elements [PR112881] X-Git-Tag: basepoints/gcc-15~3874 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e5489faf8efa30d8548bb669c0a700c409068bce;p=thirdparty%2Fgcc.git 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. --- 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