--- 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;
