]> gcc.gnu.org Git - gcc.git/commit
C _BitInt incremental fixes [PR102989]
authorJakub Jelinek <jakub@redhat.com>
Wed, 6 Sep 2023 15:39:15 +0000 (17:39 +0200)
committerJakub Jelinek <jakub@redhat.com>
Wed, 6 Sep 2023 15:39:15 +0000 (17:39 +0200)
commitf76ae4369cb6f38e17510704e5b6e53847d2a648
tree155163c871c2a9f511163913658cdb5c438fe8e4
parenta2f50aa2c578eb0572935e61818e1f2b18b53fd6
C _BitInt incremental fixes [PR102989]

On Wed, Aug 09, 2023 at 09:17:57PM +0000, Joseph Myers wrote:
> > - _Complex _BitInt(N) isn't supported; again mainly because none of the psABIs
> >   mention how those should be passed/returned; in a limited way they are
> >   supported internally because the internal functions into which
> >   __builtin_{add,sub,mul}_overflow{,_p} is lowered return COMPLEX_TYPE as a
> >   hack to return 2 values without using references/pointers
>
> What happens when the usual arithmetic conversions are applied to
> operands, one of which is a complex integer type and the other of which is
> a wider _BitInt type?  I don't see anything in the code to disallow this
> case (which would produce an expression with a _Complex _BitInt type), or
> any testcases for it.

I've added a sorry for that case (+ return the narrower COMPLEX_TYPE).
Also added testcase to verify we don't create VECTOR_TYPEs of BITINT_TYPE
even if they have mode precision and suitable size (others were rejected
already before).

> Other testcases I think should be present (along with any corresponding
> changes needed to the code itself):
>
> * Verifying that the new integer constant suffix is rejected for C++.

Done.

> * Verifying appropriate pedwarn-if-pedantic for the new constant suffix
> for versions of C before C2x (and probably for use of _BitInt type
> specifiers before C2x as well) - along with the expected -Wc11-c2x-compat
> handling (in C2x mode) / -pedantic -Wno-c11-c2x-compat in older modes.

Done.

Here is an incremental patch which does that.

2023-09-06  Jakub Jelinek  <jakub@redhat.com>

PR c/102989
gcc/c/
* c-decl.cc (finish_declspecs): Emit pedwarn_c11 on _BitInt.
* c-typeck.cc (c_common_type): Emit sorry for common type between
_Complex integer and larger _BitInt and return the _Complex integer.
gcc/c-family/
* c-attribs.cc (type_valid_for_vector_size): Reject vector types
with BITINT_TYPE elements even if they have mode precision and
suitable size.
gcc/testsuite/
* gcc.dg/bitint-19.c: New test.
* gcc.dg/bitint-20.c: New test.
* gcc.dg/bitint-21.c: New test.
* gcc.dg/bitint-22.c: New test.
* gcc.dg/bitint-23.c: New test.
* gcc.dg/bitint-24.c: New test.
* gcc.dg/bitint-25.c: New test.
* gcc.dg/bitint-26.c: New test.
* gcc.dg/bitint-27.c: New test.
* g++.dg/ext/bitint1.C: New test.
* g++.dg/ext/bitint2.C: New test.
* g++.dg/ext/bitint3.C: New test.
* g++.dg/ext/bitint4.C: New test.
libcpp/
* expr.cc (cpp_classify_number): Diagnose wb literal suffixes
for -pedantic* before C2X or -Wc11-c2x-compat.
17 files changed:
gcc/c-family/c-attribs.cc
gcc/c/c-decl.cc
gcc/c/c-typeck.cc
gcc/testsuite/g++.dg/ext/bitint1.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/bitint2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/bitint3.C [new file with mode: 0644]
gcc/testsuite/g++.dg/ext/bitint4.C [new file with mode: 0644]
gcc/testsuite/gcc.dg/bitint-19.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/bitint-20.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/bitint-21.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/bitint-22.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/bitint-23.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/bitint-24.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/bitint-25.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/bitint-26.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/bitint-27.c [new file with mode: 0644]
libcpp/expr.cc
This page took 0.071497 seconds and 6 git commands to generate.