From: Jakub Jelinek <jakub@redhat.com>
To: "Joseph S. Myers" <joseph@codesourcery.com>
Cc: gcc-patches@gcc.gnu.org
Subject: [PATCH] c: Don't pedwarn on _FloatN{,x} or {f,F}N{,x} suffixes for C2X
Date: Tue, 5 Sep 2023 15:48:15 +0200 [thread overview]
Message-ID: <ZPcxnxjX7quZWGNM@tucnak> (raw)
Hi!
Now that _Float{16,32,64,128,32x,64x,128x} and
{f,F}{16,32,64,128,32x,64x,128x} literal suffixes are in C23 standard,
I think it is undesirable to pedwarn about these for -std=c2x, so this
patch uses pedwarn_c11 instead. In c-family/, we don't have that function
and am not sure it would be very clean to define dummy pedwarn_c11 in the
C++ FE, so the patch just does what pedwarn_c11 does using pedwarn/warning.
Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
2023-09-05 Jakub Jelinek <jakub@redhat.com>
gcc/c-family/
* c-lex.cc (interpret_float): For C diagnostics on FN and FNx suffixes
append " before C2X" to diagnostics text and follow behavior of
pedwarn_c11.
gcc/c/
* c-decl.cc (declspecs_add_type): Use pedwarn_c11 rather than pedwarn
for _FloatN{,x} diagnostics and append " before C2X" to the diagnostic
text.
gcc/testsuite/
* gcc.dg/c11-floatn-1.c: New test.
* gcc.dg/c11-floatn-2.c: New test.
* gcc.dg/c11-floatn-3.c: New test.
* gcc.dg/c11-floatn-4.c: New test.
* gcc.dg/c11-floatn-5.c: New test.
* gcc.dg/c11-floatn-6.c: New test.
* gcc.dg/c11-floatn-7.c: New test.
* gcc.dg/c11-floatn-8.c: New test.
* gcc.dg/c2x-floatn-1.c: New test.
* gcc.dg/c2x-floatn-2.c: New test.
* gcc.dg/c2x-floatn-3.c: New test.
* gcc.dg/c2x-floatn-4.c: New test.
* gcc.dg/c2x-floatn-5.c: New test.
* gcc.dg/c2x-floatn-6.c: New test.
* gcc.dg/c2x-floatn-7.c: New test.
* gcc.dg/c2x-floatn-8.c: New test.
--- gcc/c-family/c-lex.cc.jj 2023-09-04 09:45:44.528902928 +0200
+++ gcc/c-family/c-lex.cc 2023-09-05 09:54:29.060725832 +0200
@@ -1185,7 +1185,25 @@ interpret_float (const cpp_token *token,
error ("unsupported non-standard suffix on floating constant");
return error_mark_node;
}
- else if (c_dialect_cxx () && !extended)
+ else if (!c_dialect_cxx ())
+ {
+ if (warn_c11_c2x_compat > 0)
+ {
+ if (pedantic && !flag_isoc2x)
+ pedwarn (input_location, OPT_Wc11_c2x_compat,
+ "non-standard suffix on floating constant "
+ "before C2X");
+ else
+ warning (OPT_Wc11_c2x_compat,
+ "non-standard suffix on floating constant "
+ "before C2X");
+ }
+ else if (warn_c11_c2x_compat != 0 && pedantic && !flag_isoc2x)
+ pedwarn (input_location, OPT_Wpedantic,
+ "non-standard suffix on floating constant "
+ "before C2X");
+ }
+ else if (!extended)
{
if (cxx_dialect < cxx23)
pedwarn (input_location, OPT_Wpedantic,
--- gcc/c/c-decl.cc.jj 2023-09-04 09:45:47.998853807 +0200
+++ gcc/c/c-decl.cc 2023-09-05 09:43:28.384918043 +0200
@@ -12140,12 +12140,13 @@ declspecs_add_type (location_t loc, stru
CASE_RID_FLOATN_NX:
specs->u.floatn_nx_idx = i - RID_FLOATN_NX_FIRST;
if (!in_system_header_at (input_location))
- pedwarn (loc, OPT_Wpedantic,
- "ISO C does not support the %<_Float%d%s%> type",
- floatn_nx_types[specs->u.floatn_nx_idx].n,
- (floatn_nx_types[specs->u.floatn_nx_idx].extended
- ? "x"
- : ""));
+ pedwarn_c11 (loc, OPT_Wpedantic,
+ "ISO C does not support the %<_Float%d%s%> type"
+ " before C2X",
+ floatn_nx_types[specs->u.floatn_nx_idx].n,
+ (floatn_nx_types[specs->u.floatn_nx_idx].extended
+ ? "x"
+ : ""));
if (specs->long_p)
error_at (loc,
--- gcc/testsuite/gcc.dg/c11-floatn-1.c.jj 2023-09-05 10:07:09.062110156 +0200
+++ gcc/testsuite/gcc.dg/c11-floatn-1.c 2023-09-05 10:10:57.288912286 +0200
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -pedantic-errors" } */
+/* { dg-add-options float32 } */
+/* { dg-add-options float64 } */
+/* { dg-add-options float32x } */
+/* { dg-require-effective-target float32 } */
+/* { dg-require-effective-target float32x } */
+/* { dg-require-effective-target float64 } */
+
+_Float32 a /* { dg-error "ISO C does not support the '_Float32' type before C2X" } */
+ = 1.0F32; /* { dg-error "non-standard suffix on floating constant before C2X" } */
+_Float64 b /* { dg-error "ISO C does not support the '_Float64' type before C2X" } */
+ = 1.0F64; /* { dg-error "non-standard suffix on floating constant before C2X" } */
+_Float32x c /* { dg-error "ISO C does not support the '_Float32x' type before C2X" } */
+ = 1.0F32x; /* { dg-error "non-standard suffix on floating constant before C2X" } */
+__extension__ _Float32 d
+ = 2.0F32;
+__extension__ _Float64 e
+ = 2.0F64;
+__extension__ _Float32x f
+ = 2.0F32x;
--- gcc/testsuite/gcc.dg/c11-floatn-2.c.jj 2023-09-05 10:11:15.563655318 +0200
+++ gcc/testsuite/gcc.dg/c11-floatn-2.c 2023-09-05 10:11:46.998213306 +0200
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -pedantic-errors" } */
+/* { dg-add-options float128 } */
+/* { dg-require-effective-target float128 } */
+
+_Float128 a /* { dg-error "ISO C does not support the '_Float128' type before C2X" } */
+ = 1.0F128; /* { dg-error "non-standard suffix on floating constant before C2X" } */
+__extension__ _Float128 b
+ = 2.0F128;
--- gcc/testsuite/gcc.dg/c11-floatn-3.c.jj 2023-09-05 10:12:49.550333735 +0200
+++ gcc/testsuite/gcc.dg/c11-floatn-3.c 2023-09-05 10:13:06.620093710 +0200
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -pedantic-errors" } */
+/* { dg-add-options float16 } */
+/* { dg-require-effective-target float16 } */
+
+_Float16 a /* { dg-error "ISO C does not support the '_Float16' type before C2X" } */
+ = 1.0F16; /* { dg-error "non-standard suffix on floating constant before C2X" } */
+__extension__ _Float16 b
+ = 2.0F16;
--- gcc/testsuite/gcc.dg/c11-floatn-4.c.jj 2023-09-05 10:13:47.421519981 +0200
+++ gcc/testsuite/gcc.dg/c11-floatn-4.c 2023-09-05 10:14:08.988216724 +0200
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -pedantic-errors" } */
+/* { dg-add-options float64x } */
+/* { dg-require-effective-target float64x } */
+
+_Float64x a /* { dg-error "ISO C does not support the '_Float64x' type before C2X" } */
+ = 1.0F64x; /* { dg-error "non-standard suffix on floating constant before C2X" } */
+__extension__ _Float64x b
+ = 2.0F64x;
--- gcc/testsuite/gcc.dg/c11-floatn-5.c.jj 2023-09-05 10:20:47.359615068 +0200
+++ gcc/testsuite/gcc.dg/c11-floatn-5.c 2023-09-05 10:21:09.303306513 +0200
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -Wc11-c2x-compat" } */
+/* { dg-add-options float32 } */
+/* { dg-add-options float64 } */
+/* { dg-add-options float32x } */
+/* { dg-require-effective-target float32 } */
+/* { dg-require-effective-target float32x } */
+/* { dg-require-effective-target float64 } */
+
+_Float32 a /* { dg-warning "ISO C does not support the '_Float32' type before C2X" } */
+ = 1.0F32; /* { dg-warning "non-standard suffix on floating constant before C2X" } */
+_Float64 b /* { dg-warning "ISO C does not support the '_Float64' type before C2X" } */
+ = 1.0F64; /* { dg-warning "non-standard suffix on floating constant before C2X" } */
+_Float32x c /* { dg-warning "ISO C does not support the '_Float32x' type before C2X" } */
+ = 1.0F32x; /* { dg-warning "non-standard suffix on floating constant before C2X" } */
+__extension__ _Float32 d
+ = 2.0F32;
+__extension__ _Float64 e
+ = 2.0F64;
+__extension__ _Float32x f
+ = 2.0F32x;
--- gcc/testsuite/gcc.dg/c11-floatn-6.c.jj 2023-09-05 10:20:47.359615068 +0200
+++ gcc/testsuite/gcc.dg/c11-floatn-6.c 2023-09-05 10:21:23.343109088 +0200
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -Wc11-c2x-compat" } */
+/* { dg-add-options float128 } */
+/* { dg-require-effective-target float128 } */
+
+_Float128 a /* { dg-warning "ISO C does not support the '_Float128' type before C2X" } */
+ = 1.0F128; /* { dg-warning "non-standard suffix on floating constant before C2X" } */
+__extension__ _Float128 b
+ = 2.0F128;
--- gcc/testsuite/gcc.dg/c11-floatn-7.c.jj 2023-09-05 10:20:47.359615068 +0200
+++ gcc/testsuite/gcc.dg/c11-floatn-7.c 2023-09-05 10:21:34.562951322 +0200
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -Wc11-c2x-compat" } */
+/* { dg-add-options float16 } */
+/* { dg-require-effective-target float16 } */
+
+_Float16 a /* { dg-warning "ISO C does not support the '_Float16' type before C2X" } */
+ = 1.0F16; /* { dg-warning "non-standard suffix on floating constant before C2X" } */
+__extension__ _Float16 b
+ = 2.0F16;
--- gcc/testsuite/gcc.dg/c11-floatn-8.c.jj 2023-09-05 10:20:47.359615068 +0200
+++ gcc/testsuite/gcc.dg/c11-floatn-8.c 2023-09-05 10:21:45.923791582 +0200
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -Wc11-c2x-compat" } */
+/* { dg-add-options float64x } */
+/* { dg-require-effective-target float64x } */
+
+_Float64x a /* { dg-warning "ISO C does not support the '_Float64x' type before C2X" } */
+ = 1.0F64x; /* { dg-warning "non-standard suffix on floating constant before C2X" } */
+__extension__ _Float64x b
+ = 2.0F64x;
--- gcc/testsuite/gcc.dg/c2x-floatn-1.c.jj 2023-09-05 10:07:34.640752875 +0200
+++ gcc/testsuite/gcc.dg/c2x-floatn-1.c 2023-09-05 10:09:06.443470577 +0200
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -pedantic-errors" } */
+/* { dg-add-options float32 } */
+/* { dg-add-options float64 } */
+/* { dg-add-options float32x } */
+/* { dg-require-effective-target float32 } */
+/* { dg-require-effective-target float32x } */
+/* { dg-require-effective-target float64 } */
+
+_Float32 a
+ = 1.0F32;
+_Float64 b
+ = 1.0F64;
+_Float32x c
+ = 1.0F32x;
+__extension__ _Float32 d
+ = 2.0F32;
+__extension__ _Float64 e
+ = 2.0F64;
+__extension__ _Float32x f
+ = 2.0F32x;
--- gcc/testsuite/gcc.dg/c2x-floatn-2.c.jj 2023-09-05 10:12:03.288984233 +0200
+++ gcc/testsuite/gcc.dg/c2x-floatn-2.c 2023-09-05 10:12:17.367786266 +0200
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -pedantic-errors" } */
+/* { dg-add-options float128 } */
+/* { dg-require-effective-target float128 } */
+
+_Float128 a
+ = 1.0F128;
+__extension__ _Float128 b
+ = 2.0F128;
--- gcc/testsuite/gcc.dg/c2x-floatn-3.c.jj 2023-09-05 10:13:20.798894337 +0200
+++ gcc/testsuite/gcc.dg/c2x-floatn-3.c 2023-09-05 10:13:31.407745160 +0200
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -pedantic-errors" } */
+/* { dg-add-options float16 } */
+/* { dg-require-effective-target float16 } */
+
+_Float16 a
+ = 1.0F16;
+__extension__ _Float16 b
+ = 2.0F16;
--- gcc/testsuite/gcc.dg/c2x-floatn-4.c.jj 2023-09-05 10:14:28.384943981 +0200
+++ gcc/testsuite/gcc.dg/c2x-floatn-4.c 2023-09-05 10:14:38.197805997 +0200
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -pedantic-errors" } */
+/* { dg-add-options float64x } */
+/* { dg-require-effective-target float64x } */
+
+_Float64x a
+ = 1.0F64x;
+__extension__ _Float64x b
+ = 2.0F64x;
--- gcc/testsuite/gcc.dg/c2x-floatn-5.c.jj 2023-09-05 10:20:47.359615068 +0200
+++ gcc/testsuite/gcc.dg/c2x-floatn-5.c 2023-09-05 10:22:25.083240936 +0200
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -Wc11-c2x-compat" } */
+/* { dg-add-options float32 } */
+/* { dg-add-options float64 } */
+/* { dg-add-options float32x } */
+/* { dg-require-effective-target float32 } */
+/* { dg-require-effective-target float32x } */
+/* { dg-require-effective-target float64 } */
+
+_Float32 a /* { dg-warning "ISO C does not support the '_Float32' type before C2X" } */
+ = 1.0F32; /* { dg-warning "non-standard suffix on floating constant before C2X" } */
+_Float64 b /* { dg-warning "ISO C does not support the '_Float64' type before C2X" } */
+ = 1.0F64; /* { dg-warning "non-standard suffix on floating constant before C2X" } */
+_Float32x c /* { dg-warning "ISO C does not support the '_Float32x' type before C2X" } */
+ = 1.0F32x; /* { dg-warning "non-standard suffix on floating constant before C2X" } */
+__extension__ _Float32 d
+ = 2.0F32;
+__extension__ _Float64 e
+ = 2.0F64;
+__extension__ _Float32x f
+ = 2.0F32x;
--- gcc/testsuite/gcc.dg/c2x-floatn-6.c.jj 2023-09-05 10:20:47.359615068 +0200
+++ gcc/testsuite/gcc.dg/c2x-floatn-6.c 2023-09-05 10:22:31.626148929 +0200
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -Wc11-c2x-compat" } */
+/* { dg-add-options float128 } */
+/* { dg-require-effective-target float128 } */
+
+_Float128 a /* { dg-warning "ISO C does not support the '_Float128' type before C2X" } */
+ = 1.0F128; /* { dg-warning "non-standard suffix on floating constant before C2X" } */
+__extension__ _Float128 b
+ = 2.0F128;
--- gcc/testsuite/gcc.dg/c2x-floatn-7.c.jj 2023-09-05 10:20:47.359615068 +0200
+++ gcc/testsuite/gcc.dg/c2x-floatn-7.c 2023-09-05 10:22:38.323054765 +0200
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -Wc11-c2x-compat" } */
+/* { dg-add-options float16 } */
+/* { dg-require-effective-target float16 } */
+
+_Float16 a /* { dg-warning "ISO C does not support the '_Float16' type before C2X" } */
+ = 1.0F16; /* { dg-warning "non-standard suffix on floating constant before C2X" } */
+__extension__ _Float16 b
+ = 2.0F16;
--- gcc/testsuite/gcc.dg/c2x-floatn-8.c.jj 2023-09-05 10:20:47.359615068 +0200
+++ gcc/testsuite/gcc.dg/c2x-floatn-8.c 2023-09-05 10:22:44.625966133 +0200
@@ -0,0 +1,9 @@
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -Wc11-c2x-compat" } */
+/* { dg-add-options float64x } */
+/* { dg-require-effective-target float64x } */
+
+_Float64x a /* { dg-warning "ISO C does not support the '_Float64x' type before C2X" } */
+ = 1.0F64x; /* { dg-warning "non-standard suffix on floating constant before C2X" } */
+__extension__ _Float64x b
+ = 2.0F64x;
Jakub
next reply other threads:[~2023-09-05 13:48 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-05 13:48 Jakub Jelinek [this message]
2023-09-05 21:34 ` Joseph Myers
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZPcxnxjX7quZWGNM@tucnak \
--to=jakub@redhat.com \
--cc=gcc-patches@gcc.gnu.org \
--cc=joseph@codesourcery.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).