Support _Decimal* keywords for C2x.
authorJoseph Myers <joseph@codesourcery.com>
Fri, 11 Oct 2019 17:32:48 +0000 (18:32 +0100)
committerJoseph Myers <jsm28@gcc.gnu.org>
Fri, 11 Oct 2019 17:32:48 +0000 (18:32 +0100)
ISO C2x adds decimal floating point as an optional standard feature.
This patch accordingly makes GCC accept the _Decimal* keywords in
strict C2x mode, using pedwarn_c11 to get a warning for
-Wc11-c2x-compat.  (Constants, where the pedwarn is in libcpp, will be
dealt with separately.)

The _Decimal* keywords are marked with D_EXT, meaning they are not
considered keywords at all in strict conformance modes.  This is
contrary to the normal practice for most implementation-namespace
keywords, which are accepted in all standards modes but with
appropriate pedwarns for older standards.  This patch removes D_EXT
from those keywords so they are accepted as keywords for all
standards, consequently removing the gcc.dg/dfp/keywords-ignored-c99.c
test that is no longer valid.

(A new D_C2X for keywords will still be needed if any new keywords get
added that aren't in the implementation namespace for older standards;
there are proposals for such keywords, albeit as predefined macros
that might not actually need new keywords in the compiler in all
cases.  If the DFP keywords end up as decimal32 etc., of course
appropriate compiler and testcase changes will be needed, and a
version of keywords-ignored-c99.c would make sense again with such
spellings.)

Bootstrapped with no regressions on x86_64-pc-linux-gnu.

gcc/c:
* c-decl.c (declspecs_add_type): Use pedwarn_c11 for DFP types.

gcc/c-family:
* c-common.c (c_common_reswords): Do not use D_EXT for _Decimal32,
_Decimal64 and _Decimal128.

gcc/testsuite:
* gcc.dg/dfp/c11-keywords-1.c, gcc.dg/dfp/c11-keywords-2.c,
gcc.dg/dfp/c2x-keywords-1.c, gcc.dg/dfp/c2x-keywords-2.c: New
tests.
* gcc.dg/dfp/keywords-ignored-c99.c: Remove test.
* gcc.dg/dfp/constants-c99.c, gcc.dg/dfp/keywords-c89.c,
gcc.dg/dfp/keywords-c99.c: Use -pedantic-errors.

From-SVN: r276896

13 files changed:
gcc/c-family/ChangeLog
gcc/c-family/c-common.c
gcc/c/ChangeLog
gcc/c/c-decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/dfp/c11-keywords-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/dfp/c11-keywords-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/dfp/c2x-keywords-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/dfp/c2x-keywords-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/dfp/constants-c99.c
gcc/testsuite/gcc.dg/dfp/keywords-c89.c
gcc/testsuite/gcc.dg/dfp/keywords-c99.c
gcc/testsuite/gcc.dg/dfp/keywords-ignored-c99.c [deleted file]

index a41e910f1c23b67e1036193a20415029687ccbb6..a0ce54b485870241d30728af55a431e6176e14b1 100644 (file)
@@ -1,3 +1,8 @@
+2019-10-11  Joseph Myers  <joseph@codesourcery.com>
+
+       * c-common.c (c_common_reswords): Do not use D_EXT for _Decimal32,
+       _Decimal64 and _Decimal128.
+
 2019-10-10  Joseph Myers  <joseph@codesourcery.com>
 
        * c-cppbuiltin.c (c_cpp_builtins): Do not define macros for DFP
index 7169813d0f26a1a3621d536748236b4ba8b5d904..909f52a922a524731925f5ba1d13732a1efb9fb2 100644 (file)
@@ -351,9 +351,9 @@ const struct c_common_resword c_common_reswords[] =
   { "_Float32x",        RID_FLOAT32X,  D_CONLY },
   { "_Float64x",        RID_FLOAT64X,  D_CONLY },
   { "_Float128x",       RID_FLOAT128X, D_CONLY },
-  { "_Decimal32",       RID_DFLOAT32,  D_CONLY | D_EXT },
-  { "_Decimal64",       RID_DFLOAT64,  D_CONLY | D_EXT },
-  { "_Decimal128",      RID_DFLOAT128, D_CONLY | D_EXT },
+  { "_Decimal32",       RID_DFLOAT32,  D_CONLY },
+  { "_Decimal64",       RID_DFLOAT64,  D_CONLY },
+  { "_Decimal128",      RID_DFLOAT128, D_CONLY },
   { "_Fract",           RID_FRACT,     D_CONLY | D_EXT },
   { "_Accum",           RID_ACCUM,     D_CONLY | D_EXT },
   { "_Sat",             RID_SAT,       D_CONLY | D_EXT },
index fa1001cc9cb533dddf88db68998163d8125ab29f..894f5e752e3a8024c6a206bd69829b8bad2df469 100644 (file)
@@ -1,3 +1,7 @@
+2019-10-11  Joseph Myers  <joseph@codesourcery.com>
+
+       * c-decl.c (declspecs_add_type): Use pedwarn_c11 for DFP types.
+
 2019-10-10  Jakub Jelinek  <jakub@redhat.com>
 
        * c-parser.c (c_parser_omp_all_clauses): Add NESTED_P argument, if
index 132fa3edb27d780bb922243f6795bf782d8775c7..f67033b82d25d5c45940de6ee221f76b714669db 100644 (file)
@@ -10959,8 +10959,9 @@ declspecs_add_type (location_t loc, struct c_declspecs *specs,
                error_at (loc,
                          ("decimal floating-point not supported "
                           "for this target"));
-             pedwarn (loc, OPT_Wpedantic,
-                      "ISO C does not support decimal floating-point");
+             pedwarn_c11 (loc, OPT_Wpedantic,
+                          "ISO C does not support decimal floating-point "
+                          "before C2X");
              return specs;
            case RID_FRACT:
            case RID_ACCUM:
index 488eba91b93f7bce8dd019e30b726b00b01a9768..2459275f333da06e7266e2b66fb3279a5c2b7be3 100644 (file)
@@ -1,3 +1,12 @@
+2019-10-11  Joseph Myers  <joseph@codesourcery.com>
+
+       * gcc.dg/dfp/c11-keywords-1.c, gcc.dg/dfp/c11-keywords-2.c,
+       gcc.dg/dfp/c2x-keywords-1.c, gcc.dg/dfp/c2x-keywords-2.c: New
+       tests.
+       * gcc.dg/dfp/keywords-ignored-c99.c: Remove test.
+       * gcc.dg/dfp/constants-c99.c, gcc.dg/dfp/keywords-c89.c,
+       gcc.dg/dfp/keywords-c99.c: Use -pedantic-errors.
+
 2019-10-11  Tobias Burnus  <tobias@codesourcery.com>
 
        PR fortran/92050
diff --git a/gcc/testsuite/gcc.dg/dfp/c11-keywords-1.c b/gcc/testsuite/gcc.dg/dfp/c11-keywords-1.c
new file mode 100644 (file)
index 0000000..5a5c862
--- /dev/null
@@ -0,0 +1,7 @@
+/* Test that _Decimal* keywords diagnosed in C11 mode: -pedantic.  */
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -pedantic" } */
+
+_Decimal32 d32; /* { dg-warning "ISO C does not support" } */
+_Decimal64 d64; /* { dg-warning "ISO C does not support" } */
+_Decimal128 d128; /* { dg-warning "ISO C does not support" } */
diff --git a/gcc/testsuite/gcc.dg/dfp/c11-keywords-2.c b/gcc/testsuite/gcc.dg/dfp/c11-keywords-2.c
new file mode 100644 (file)
index 0000000..7c7f3d9
--- /dev/null
@@ -0,0 +1,7 @@
+/* Test that _Decimal* keywords diagnosed in C11 mode: -pedantic-errors.  */
+/* { dg-do compile } */
+/* { dg-options "-std=c11 -pedantic-errors" } */
+
+_Decimal32 d32; /* { dg-error "ISO C does not support" } */
+_Decimal64 d64; /* { dg-error "ISO C does not support" } */
+_Decimal128 d128; /* { dg-error "ISO C does not support" } */
diff --git a/gcc/testsuite/gcc.dg/dfp/c2x-keywords-1.c b/gcc/testsuite/gcc.dg/dfp/c2x-keywords-1.c
new file mode 100644 (file)
index 0000000..a3a1da5
--- /dev/null
@@ -0,0 +1,7 @@
+/* Test that _Decimal* keywords are accepted in C2X mode.  */
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -pedantic-errors" } */
+
+_Decimal32 d32;
+_Decimal64 d64;
+_Decimal128 d128;
diff --git a/gcc/testsuite/gcc.dg/dfp/c2x-keywords-2.c b/gcc/testsuite/gcc.dg/dfp/c2x-keywords-2.c
new file mode 100644 (file)
index 0000000..9655dd0
--- /dev/null
@@ -0,0 +1,7 @@
+/* Test that _Decimal* keywords are accepted in C2X mode: compat warnings.  */
+/* { dg-do compile } */
+/* { dg-options "-std=c2x -Wc11-c2x-compat" } */
+
+_Decimal32 d32; /* { dg-warning "ISO C does not support" } */
+_Decimal64 d64; /* { dg-warning "ISO C does not support" } */
+_Decimal128 d128; /* { dg-warning "ISO C does not support" } */
index 6a48bf501f03c904afb9c222c398f4efee4702f9..5a135c534928f975657911b93ea857c70092af69 100644 (file)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-std=c99 -Wno-overflow" } */
+/* { dg-options "-std=c99 -Wno-overflow -pedantic-errors" } */
 
 /* N1150 6: Constants.
    C99 6.4.4.2: Floating constants.  */
index 8c96d60c7dd2fd325b972f8117f357b557b79835..a67c3d63c0b1daaa964e01138b4cb8849577f0a5 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
-/* { dg-options "-std=c89" } */
+/* { dg-options "-std=c89 -pedantic-errors" } */
 
-/* Decimal float keywords are not recognized in C89 mode.  */
+/* Decimal float keywords are diagnosed in pedantic C89 mode.  */
 
 _Decimal32 x;          /* { dg-error "" } */
 _Decimal64 y;          /* { dg-error "" } */
index 8a62fb93e82e7a3de67c6725a24455a89688aee9..f51900e380865546601ef3425a09a217337296f5 100644 (file)
@@ -1,7 +1,7 @@
 /* { dg-do compile } */
-/* { dg-options "-std=c99" } */
+/* { dg-options "-std=c99 -pedantic-errors" } */
 
-/* Decimal float keywords are not recognized in C99 mode.  */
+/* Decimal float keywords are diagnosed in pedantic C99 mode.  */
 
 _Decimal32 x;          /* { dg-error "" } */
 _Decimal64 y;          /* { dg-error "" } */
diff --git a/gcc/testsuite/gcc.dg/dfp/keywords-ignored-c99.c b/gcc/testsuite/gcc.dg/dfp/keywords-ignored-c99.c
deleted file mode 100644 (file)
index a4258aa..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-std=c99" } */
-
-/* Decimal float keywords are not reserved for c99.  */
-
-int _Decimal32 (void)
-{
-  return 0;
-}
-
-int foo (int i)
-{
-  int _Decimal64 = i * 2;
-  return _Decimal64;
-}