]> git.ipfire.org Git - thirdparty/gcc.git/commit
c: Implement C2Y N3298 - Introduce complex literals [PR117029]
authorJakub Jelinek <jakub@redhat.com>
Wed, 13 Nov 2024 08:41:41 +0000 (09:41 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 13 Nov 2024 08:41:41 +0000 (09:41 +0100)
commiteb45d151fa1780d01533d9fc9545fec50bfd7152
tree5270592b4fc51ec8898cf3a0b86d6773a09c7ca3
parent9b2915d95d855333d4d8f66b71a75f653ee0d076
c: Implement C2Y N3298 - Introduce complex literals [PR117029]

The following patch implements the C2Y N3298 paper Introduce complex literals
by providing different (or no) diagnostics on imaginary constants (except
for integer ones).
For _DecimalN constants we don't support _Complex _DecimalN and error on any
i/j suffixes mixed with DD/DL/DF, so nothing changed there.

2024-11-13  Jakub Jelinek  <jakub@redhat.com>

PR c/117029
libcpp/
* include/cpplib.h (struct cpp_options): Add imaginary_constants
member.
* init.cc (struct lang_flags): Add imaginary_constants bitfield.
(lang_defaults): Add column for imaginary_constants.
(cpp_set_lang): Copy over imaginary_constants.
* expr.cc (cpp_classify_number): Diagnose CPP_N_IMAGINARY
non-CPP_N_FLOATING constants differently for C.
gcc/testsuite/
* gcc.dg/cpp/pr7263-3.c: Adjust expected diagnostic wording.
* gcc.dg/c23-imaginary-constants-1.c: New test.
* gcc.dg/c23-imaginary-constants-2.c: New test.
* gcc.dg/c23-imaginary-constants-3.c: New test.
* gcc.dg/c23-imaginary-constants-4.c: New test.
* gcc.dg/c23-imaginary-constants-5.c: New test.
* gcc.dg/c23-imaginary-constants-6.c: New test.
* gcc.dg/c23-imaginary-constants-7.c: New test.
* gcc.dg/c23-imaginary-constants-8.c: New test.
* gcc.dg/c23-imaginary-constants-9.c: New test.
* gcc.dg/c23-imaginary-constants-10.c: New test.
* gcc.dg/c2y-imaginary-constants-1.c: New test.
* gcc.dg/c2y-imaginary-constants-2.c: New test.
* gcc.dg/c2y-imaginary-constants-3.c: New test.
* gcc.dg/c2y-imaginary-constants-4.c: New test.
* gcc.dg/c2y-imaginary-constants-5.c: New test.
* gcc.dg/c2y-imaginary-constants-6.c: New test.
* gcc.dg/c2y-imaginary-constants-7.c: New test.
* gcc.dg/c2y-imaginary-constants-8.c: New test.
* gcc.dg/c2y-imaginary-constants-9.c: New test.
* gcc.dg/c2y-imaginary-constants-10.c: New test.
* gcc.dg/c2y-imaginary-constants-11.c: New test.
* gcc.dg/c2y-imaginary-constants-12.c: New test.
26 files changed:
gcc/testsuite/gcc.dg/c23-imaginary-constants-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c23-imaginary-constants-10.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c23-imaginary-constants-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c23-imaginary-constants-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c23-imaginary-constants-4.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c23-imaginary-constants-5.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c23-imaginary-constants-6.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c23-imaginary-constants-7.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c23-imaginary-constants-8.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c23-imaginary-constants-9.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2y-imaginary-constants-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2y-imaginary-constants-10.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2y-imaginary-constants-11.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2y-imaginary-constants-12.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2y-imaginary-constants-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2y-imaginary-constants-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2y-imaginary-constants-4.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2y-imaginary-constants-5.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2y-imaginary-constants-6.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2y-imaginary-constants-7.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2y-imaginary-constants-8.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2y-imaginary-constants-9.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/cpp/pr7263-3.c
libcpp/expr.cc
libcpp/include/cpplib.h
libcpp/init.cc