diff options
author | Jakub Jelinek <jakub@redhat.com> | 2023-12-07 09:47:16 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2023-12-07 09:47:16 +0100 |
commit | e5489faf8efa30d8548bb669c0a700c409068bce (patch) | |
tree | 5a53a9504eff475997caa70512b408bb10fbbdd8 /gcc | |
parent | f74939bd539c87f669e35042f7bc7aa47f0c29eb (diff) | |
download | gcc-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.cc | 1 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/bitint-50.c | 21 |
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 |