Update DFP macros in float.h for C2x and TS 18661-2.
authorJoseph Myers <joseph@codesourcery.com>
Thu, 10 Oct 2019 22:54:33 +0000 (23:54 +0100)
committerJoseph Myers <jsm28@gcc.gnu.org>
Thu, 10 Oct 2019 22:54:33 +0000 (23:54 +0100)
GCC's <float.h> includes various macros for decimal floating-point
types, defined if __STDC_WANT_DEC_FP__, as defined in TS 24732.

TS 18661-2 and C2X make some changes to those macros.  In TS 18661-2,
they are to be defined if __STDC_WANT_IEC_60559_DFP_EXT__, and the
*_SUBNORMAL_MIN macros are renamed to *_TRUE_MIN.  In C2X, the macros
are to be defined whenever DFP is supported, without needing any
feature test macro to be defined.

This patch updates the header accordingly.  There is no existing
predefined macro for whether the target supports DFP; rather than
adding a new macro for that purpose, this patch changes the predefined
macros used in <float.h> so that they are only defined when DFP is
supported and thus can be used as conditionals; this is the same way
predefined macros for _FloatN and _FloatNx types work.  Although
formally TR 24732 and TS 18661-2 say nothing about implementations
lacking DFP support, it seems appropriate to avoid defining the macros
in <float.h>, in the absence of DFP support, even if the respective
feature test macros are defined.

Bootstrapped with no regressions on x86_64-pc-linux-gnu.  Also tested
the c2x-float-no-dfp-* tests for aarch64-linux-gnu to make sure they
do pass in a no-DFP configuration.

gcc:
* ginclude/float.h [!__DEC32_MANT_DIG__]: Do not define DFP
macros.
[__STDC_WANT_IEC_60559_DFP_EXT__ || __STDC_VERSION__ > 201710L]:
Also define DFP macros for these conditions.
[!__STDC_WANT_DEC_FP__] (DEC32_SUBNORMAL_MIN, DEC64_SUBNORMAL_MIN,
DEC128_SUBNORMAL_MIN): Do not define.
[__STDC_WANT_IEC_60559_DFP_EXT__ || __STDC_VERSION__ > 201710L]
(DEC32_TRUE_MIN, DEC64_TRUE_MIN, DEC128_TRUE_MIN): New macros.

gcc/c-family:
* c-cppbuiltin.c (c_cpp_builtins): Do not define macros for DFP
types if DFP not supported.

gcc/testsuite:
* gcc.dg/c11-float-dfp-1.c, gcc.dg/c2x-float-no-dfp-1.c,
gcc.dg/c2x-float-no-dfp-2.c, gcc.dg/dfp/c2x-float-dfp-1.c,
gcc.dg/dfp/c2x-float-dfp-2.c, gcc.dg/dfp/c2x-float-dfp-3.c,
gcc.dg/dfp/tr24732-float-dfp-1.c,
gcc.dg/dfp/ts18661-2-float-dfp-1.c: New tests.

From-SVN: r276854

13 files changed:
gcc/ChangeLog
gcc/c-family/ChangeLog
gcc/c-family/c-cppbuiltin.c
gcc/ginclude/float.h
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/c11-float-dfp-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2x-float-no-dfp-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/c2x-float-no-dfp-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/dfp/c2x-float-dfp-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/dfp/c2x-float-dfp-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/dfp/c2x-float-dfp-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/dfp/tr24732-float-dfp-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/dfp/ts18661-2-float-dfp-1.c [new file with mode: 0644]

index b9bcabae38a9a9c5c850749316e63cd2584295b3..3d9af72764ab30a56c4bf4b7b54566eca41b769f 100644 (file)
@@ -1,3 +1,14 @@
+2019-10-10  Joseph Myers  <joseph@codesourcery.com>
+
+       * ginclude/float.h [!__DEC32_MANT_DIG__]: Do not define DFP
+       macros.
+       [__STDC_WANT_IEC_60559_DFP_EXT__ || __STDC_VERSION__ > 201710L]:
+       Also define DFP macros for these conditions.
+       [!__STDC_WANT_DEC_FP__] (DEC32_SUBNORMAL_MIN, DEC64_SUBNORMAL_MIN,
+       DEC128_SUBNORMAL_MIN): Do not define.
+       [__STDC_WANT_IEC_60559_DFP_EXT__ || __STDC_VERSION__ > 201710L]
+       (DEC32_TRUE_MIN, DEC64_TRUE_MIN, DEC128_TRUE_MIN): New macros.
+
 2019-10-10  Xiong Hu Luo  <luoxhu@linux.ibm.com>
            Sandra Loosemore  <sandra@codesourcery.com>
 
index 598fea4f8583e29f5cb47a298e26e03c3ee36b3d..a41e910f1c23b67e1036193a20415029687ccbb6 100644 (file)
@@ -1,3 +1,8 @@
+2019-10-10  Joseph Myers  <joseph@codesourcery.com>
+
+       * c-cppbuiltin.c (c_cpp_builtins): Do not define macros for DFP
+       types if DFP not supported.
+
 2019-10-10  Jakub Jelinek  <jakub@redhat.com>
 
        * c-common.h (c_omp_check_context_selector,
index d9941e74e2ee08c8732380d4423c70753784988a..8a66c911aec33d965b70b9cd0f34249587fef270 100644 (file)
@@ -1151,10 +1151,16 @@ c_cpp_builtins (cpp_reader *pfile)
                                      csuffix, FLOATN_NX_TYPE_NODE (i));
     }
 
-  /* For decfloat.h.  */
-  builtin_define_decimal_float_constants ("DEC32", "DF", dfloat32_type_node);
-  builtin_define_decimal_float_constants ("DEC64", "DD", dfloat64_type_node);
-  builtin_define_decimal_float_constants ("DEC128", "DL", dfloat128_type_node);
+  /* For float.h.  */
+  if (targetm.decimal_float_supported_p ())
+    {
+      builtin_define_decimal_float_constants ("DEC32", "DF",
+                                             dfloat32_type_node);
+      builtin_define_decimal_float_constants ("DEC64", "DD",
+                                             dfloat64_type_node);
+      builtin_define_decimal_float_constants ("DEC128", "DL",
+                                             dfloat128_type_node);
+    }
 
   /* For fixed-point fibt, ibit, max, min, and epsilon.  */
   if (targetm.fixed_point_supported_p ())
index 4767d7b9dfbd32cda91a846ed7c1a72d1831d98c..dc91c75603e0471b1f16a49ea1233bc7d937372d 100644 (file)
@@ -426,9 +426,13 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #endif /* __STDC_WANT_IEC_60559_TYPES_EXT__.  */
 
-#ifdef __STDC_WANT_DEC_FP__
-/* Draft Technical Report 24732, extension for decimal floating-point
-   arithmetic: Characteristic of decimal floating types <float.h>.  */
+#ifdef __DEC32_MANT_DIG__
+#if (defined __STDC_WANT_DEC_FP__ \
+     || defined __STDC_WANT_IEC_60559_DFP_EXT__ \
+     || (defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L))
+/* C2X; formerly Technical Report 24732, extension for decimal
+   floating-point arithmetic: Characteristic of decimal floating types
+   <float.h>, and TS 18661-2.  */
 
 /* Number of base-FLT_RADIX digits in the significand, p.  */
 #undef DEC32_MANT_DIG
@@ -480,14 +484,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #define DEC64_MIN      __DEC64_MIN__
 #define DEC128_MIN     __DEC128_MIN__
 
-/* Minimum subnormal positive floating-point number. */
-#undef DEC32_SUBNORMAL_MIN
-#undef DEC64_SUBNORMAL_MIN
-#undef DEC128_SUBNORMAL_MIN
-#define DEC32_SUBNORMAL_MIN       __DEC32_SUBNORMAL_MIN__
-#define DEC64_SUBNORMAL_MIN       __DEC64_SUBNORMAL_MIN__
-#define DEC128_SUBNORMAL_MIN      __DEC128_SUBNORMAL_MIN__
-
 /* The floating-point expression evaluation method.
          -1  indeterminate
          0  evaluate all operations and constants just to the range and
@@ -502,6 +498,33 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 #undef DEC_EVAL_METHOD
 #define DEC_EVAL_METHOD        __DEC_EVAL_METHOD__
 
-#endif /* __STDC_WANT_DEC_FP__ */
+#endif /* __STDC_WANT_DEC_FP__ || __STDC_WANT_IEC_60559_DFP_EXT__ || C2X.  */
+
+#ifdef __STDC_WANT_DEC_FP__
+
+/* Minimum subnormal positive floating-point number. */
+#undef DEC32_SUBNORMAL_MIN
+#undef DEC64_SUBNORMAL_MIN
+#undef DEC128_SUBNORMAL_MIN
+#define DEC32_SUBNORMAL_MIN       __DEC32_SUBNORMAL_MIN__
+#define DEC64_SUBNORMAL_MIN       __DEC64_SUBNORMAL_MIN__
+#define DEC128_SUBNORMAL_MIN      __DEC128_SUBNORMAL_MIN__
+
+#endif /* __STDC_WANT_DEC_FP__.  */
+
+#if (defined __STDC_WANT_IEC_60559_DFP_EXT__ \
+     || (defined __STDC_VERSION__ && __STDC_VERSION__ > 201710L))
+
+/* Minimum subnormal positive floating-point number. */
+#undef DEC32_TRUE_MIN
+#undef DEC64_TRUE_MIN
+#undef DEC128_TRUE_MIN
+#define DEC32_TRUE_MIN       __DEC32_SUBNORMAL_MIN__
+#define DEC64_TRUE_MIN       __DEC64_SUBNORMAL_MIN__
+#define DEC128_TRUE_MIN      __DEC128_SUBNORMAL_MIN__
+
+#endif /* __STDC_WANT_IEC_60559_DFP_EXT__ || C2X.  */
+
+#endif /* __DEC32_MANT_DIG__ */
 
 #endif /* _FLOAT_H___ */
index c3f588058f3a7ed59ca76f43a8e67480527e42ca..76e634e176141072c4630bfc02237ee1eb0fe8ac 100644 (file)
@@ -1,3 +1,11 @@
+2019-10-10  Joseph Myers  <joseph@codesourcery.com>
+
+       * gcc.dg/c11-float-dfp-1.c, gcc.dg/c2x-float-no-dfp-1.c,
+       gcc.dg/c2x-float-no-dfp-2.c, gcc.dg/dfp/c2x-float-dfp-1.c,
+       gcc.dg/dfp/c2x-float-dfp-2.c, gcc.dg/dfp/c2x-float-dfp-3.c,
+       gcc.dg/dfp/tr24732-float-dfp-1.c,
+       gcc.dg/dfp/ts18661-2-float-dfp-1.c: New tests.
+
 2019-10-10  David Malcolm  <dmalcolm@redhat.com>
 
        PR 87488
diff --git a/gcc/testsuite/gcc.dg/c11-float-dfp-1.c b/gcc/testsuite/gcc.dg/c11-float-dfp-1.c
new file mode 100644 (file)
index 0000000..8d86b1b
--- /dev/null
@@ -0,0 +1,5 @@
+/* Test DFP macros not defined in <float.h> for C11.  */
+/* { dg-do compile } */
+/* { dg-options "-std=c11" } */
+
+#include "c2x-float-no-dfp-1.c"
diff --git a/gcc/testsuite/gcc.dg/c2x-float-no-dfp-1.c b/gcc/testsuite/gcc.dg/c2x-float-no-dfp-1.c
new file mode 100644 (file)
index 0000000..73610c8
--- /dev/null
@@ -0,0 +1,101 @@
+/* Test DFP macros not defined in <float.h> if no DFP support.  */
+/* { dg-do compile { target { ! dfp } } } */
+/* { dg-options "-std=c2x" } */
+
+#include <float.h>
+
+#ifdef DEC32_MANT_DIG
+# error "DEC32_MANT_DIG defined"
+#endif
+
+#ifdef DEC64_MANT_DIG
+# error "DEC64_MANT_DIG defined"
+#endif
+
+#ifdef DEC128_MANT_DIG
+# error "DEC128_MANT_DIG defined"
+#endif
+
+#ifdef DEC32_MIN_EXP
+# error "DEC32_MIN_EXP defined"
+#endif
+
+#ifdef DEC64_MIN_EXP
+# error "DEC64_MIN_EXP defined"
+#endif
+
+#ifdef DEC128_MIN_EXP
+# error "DEC128_MIN_EXP defined"
+#endif
+
+#ifdef DEC32_MAX_EXP
+# error "DEC32_MAX_EXP defined"
+#endif
+
+#ifdef DEC64_MAX_EXP
+# error "DEC64_MAX_EXP defined"
+#endif
+
+#ifdef DEC128_MAX_EXP
+# error "DEC128_MAX_EXP defined"
+#endif
+
+#ifdef DEC32_MAX
+# error "DEC32_MAX defined"
+#endif
+
+#ifdef DEC64_MAX
+# error "DEC64_MAX defined"
+#endif
+
+#ifdef DEC128_MAX
+# error "DEC128_MAX defined"
+#endif
+
+#ifdef DEC32_EPSILON
+# error "DEC32_EPSILON defined"
+#endif
+
+#ifdef DEC64_EPSILON
+# error "DEC64_EPSILON defined"
+#endif
+
+#ifdef DEC128_EPSILON
+# error "DEC128_EPSILON defined"
+#endif
+
+#ifdef DEC32_MIN
+# error "DEC32_MIN defined"
+#endif
+
+#ifdef DEC64_MIN
+# error "DEC64_MIN defined"
+#endif
+
+#ifdef DEC128_MIN
+# error "DEC128_MIN defined"
+#endif
+
+#ifdef DEC32_TRUE_MIN
+# error "DEC32_TRUE_MIN defined"
+#endif
+
+#ifdef DEC64_TRUE_MIN
+# error "DEC64_TRUE_MIN defined"
+#endif
+
+#ifdef DEC128_TRUE_MIN
+# error "DEC128_TRUE_MIN defined"
+#endif
+
+#ifdef DEC32_SUBNORMAL_MIN
+# error "DEC32_SUBNORMAL_MIN defined"
+#endif
+
+#ifdef DEC64_SUBNORMAL_MIN
+# error "DEC64_SUBNORMAL_MIN defined"
+#endif
+
+#ifdef DEC128_SUBNORMAL_MIN
+# error "DEC128_SUBNORMAL_MIN defined"
+#endif
diff --git a/gcc/testsuite/gcc.dg/c2x-float-no-dfp-2.c b/gcc/testsuite/gcc.dg/c2x-float-no-dfp-2.c
new file mode 100644 (file)
index 0000000..730ce89
--- /dev/null
@@ -0,0 +1,9 @@
+/* Test DFP macros not defined in <float.h> if no DFP support.  Test
+   with feature test macros defined.  */
+/* { dg-do compile { target { ! dfp } } } */
+/* { dg-options "-std=c2x" } */
+
+#define __STDC_WANT_DEC_FP__
+#define __STDC_WANT_IEC_60559_DFP_EXT__
+
+#include "c2x-float-no-dfp-1.c"
diff --git a/gcc/testsuite/gcc.dg/dfp/c2x-float-dfp-1.c b/gcc/testsuite/gcc.dg/dfp/c2x-float-dfp-1.c
new file mode 100644 (file)
index 0000000..ee5e678
--- /dev/null
@@ -0,0 +1,103 @@
+/* Test DFP macros defined in <float.h> with DFP support.  */
+/* { dg-do compile } */
+/* { dg-options "-std=c2x" } */
+
+#include <float.h>
+
+#ifndef DEC32_MANT_DIG
+# error "DEC32_MANT_DIG not defined"
+#endif
+
+#ifndef DEC64_MANT_DIG
+# error "DEC64_MANT_DIG not defined"
+#endif
+
+#ifndef DEC128_MANT_DIG
+# error "DEC128_MANT_DIG not defined"
+#endif
+
+#ifndef DEC32_MIN_EXP
+# error "DEC32_MIN_EXP not defined"
+#endif
+
+#ifndef DEC64_MIN_EXP
+# error "DEC64_MIN_EXP not defined"
+#endif
+
+#ifndef DEC128_MIN_EXP
+# error "DEC128_MIN_EXP not defined"
+#endif
+
+#ifndef DEC32_MAX_EXP
+# error "DEC32_MAX_EXP not defined"
+#endif
+
+#ifndef DEC64_MAX_EXP
+# error "DEC64_MAX_EXP not defined"
+#endif
+
+#ifndef DEC128_MAX_EXP
+# error "DEC128_MAX_EXP not defined"
+#endif
+
+#ifndef DEC32_MAX
+# error "DEC32_MAX not defined"
+#endif
+
+#ifndef DEC64_MAX
+# error "DEC64_MAX not defined"
+#endif
+
+#ifndef DEC128_MAX
+# error "DEC128_MAX not defined"
+#endif
+
+#ifndef DEC32_EPSILON
+# error "DEC32_EPSILON not defined"
+#endif
+
+#ifndef DEC64_EPSILON
+# error "DEC64_EPSILON not defined"
+#endif
+
+#ifndef DEC128_EPSILON
+# error "DEC128_EPSILON not defined"
+#endif
+
+#ifndef DEC32_MIN
+# error "DEC32_MIN not defined"
+#endif
+
+#ifndef DEC64_MIN
+# error "DEC64_MIN not defined"
+#endif
+
+#ifndef DEC128_MIN
+# error "DEC128_MIN not defined"
+#endif
+
+#ifndef DEC32_TRUE_MIN
+# error "DEC32_TRUE_MIN not defined"
+#endif
+
+#ifndef DEC64_TRUE_MIN
+# error "DEC64_TRUE_MIN not defined"
+#endif
+
+#ifndef DEC128_TRUE_MIN
+# error "DEC128_TRUE_MIN not defined"
+#endif
+
+/* These macros from TR 24732 should not be defined.  */
+
+#ifdef DEC32_SUBNORMAL_MIN
+# error "DEC32_SUBNORMAL_MIN defined"
+#endif
+
+#ifdef DEC64_SUBNORMAL_MIN
+# error "DEC64_SUBNORMAL_MIN defined"
+#endif
+
+#ifdef DEC128_SUBNORMAL_MIN
+# error "DEC128_SUBNORMAL_MIN defined"
+#endif
diff --git a/gcc/testsuite/gcc.dg/dfp/c2x-float-dfp-2.c b/gcc/testsuite/gcc.dg/dfp/c2x-float-dfp-2.c
new file mode 100644 (file)
index 0000000..9ba5690
--- /dev/null
@@ -0,0 +1,8 @@
+/* Test DFP macros defined in <float.h> with DFP support.  TS 18661-2
+   feature test macro does not change what is defined.  */
+/* { dg-do compile } */
+/* { dg-options "-std=c2x" } */
+
+#define __STDC_WANT_IEC_60559_DFP_EXT__
+
+#include "c2x-float-dfp-1.c"
diff --git a/gcc/testsuite/gcc.dg/dfp/c2x-float-dfp-3.c b/gcc/testsuite/gcc.dg/dfp/c2x-float-dfp-3.c
new file mode 100644 (file)
index 0000000..00b51a4
--- /dev/null
@@ -0,0 +1,103 @@
+/* Test DFP macros defined in <float.h> with DFP support.  TR 24732
+   feature test macro causes *_SUBNORMAL_MIN macros to be defined.  */
+/* { dg-do compile } */
+/* { dg-options "-std=c2x" } */
+
+#define __STDC_WANT_DEC_FP__
+#include <float.h>
+
+#ifndef DEC32_MANT_DIG
+# error "DEC32_MANT_DIG not defined"
+#endif
+
+#ifndef DEC64_MANT_DIG
+# error "DEC64_MANT_DIG not defined"
+#endif
+
+#ifndef DEC128_MANT_DIG
+# error "DEC128_MANT_DIG not defined"
+#endif
+
+#ifndef DEC32_MIN_EXP
+# error "DEC32_MIN_EXP not defined"
+#endif
+
+#ifndef DEC64_MIN_EXP
+# error "DEC64_MIN_EXP not defined"
+#endif
+
+#ifndef DEC128_MIN_EXP
+# error "DEC128_MIN_EXP not defined"
+#endif
+
+#ifndef DEC32_MAX_EXP
+# error "DEC32_MAX_EXP not defined"
+#endif
+
+#ifndef DEC64_MAX_EXP
+# error "DEC64_MAX_EXP not defined"
+#endif
+
+#ifndef DEC128_MAX_EXP
+# error "DEC128_MAX_EXP not defined"
+#endif
+
+#ifndef DEC32_MAX
+# error "DEC32_MAX not defined"
+#endif
+
+#ifndef DEC64_MAX
+# error "DEC64_MAX not defined"
+#endif
+
+#ifndef DEC128_MAX
+# error "DEC128_MAX not defined"
+#endif
+
+#ifndef DEC32_EPSILON
+# error "DEC32_EPSILON not defined"
+#endif
+
+#ifndef DEC64_EPSILON
+# error "DEC64_EPSILON not defined"
+#endif
+
+#ifndef DEC128_EPSILON
+# error "DEC128_EPSILON not defined"
+#endif
+
+#ifndef DEC32_MIN
+# error "DEC32_MIN not defined"
+#endif
+
+#ifndef DEC64_MIN
+# error "DEC64_MIN not defined"
+#endif
+
+#ifndef DEC128_MIN
+# error "DEC128_MIN not defined"
+#endif
+
+#ifndef DEC32_TRUE_MIN
+# error "DEC32_TRUE_MIN not defined"
+#endif
+
+#ifndef DEC64_TRUE_MIN
+# error "DEC64_TRUE_MIN not defined"
+#endif
+
+#ifndef DEC128_TRUE_MIN
+# error "DEC128_TRUE_MIN not defined"
+#endif
+
+#ifndef DEC32_SUBNORMAL_MIN
+# error "DEC32_SUBNORMAL_MIN not defined"
+#endif
+
+#ifndef DEC64_SUBNORMAL_MIN
+# error "DEC64_SUBNORMAL_MIN not defined"
+#endif
+
+#ifndef DEC128_SUBNORMAL_MIN
+# error "DEC128_SUBNORMAL_MIN not defined"
+#endif
diff --git a/gcc/testsuite/gcc.dg/dfp/tr24732-float-dfp-1.c b/gcc/testsuite/gcc.dg/dfp/tr24732-float-dfp-1.c
new file mode 100644 (file)
index 0000000..c196816
--- /dev/null
@@ -0,0 +1,106 @@
+/* Test DFP macros defined in <float.h> with DFP support.  TR 24732
+   feature test macro causes SUBNORMAL_MIN macros to be defined but
+   not TRUE_MIN ones.  */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu99" } */
+
+#define __STDC_WANT_DEC_FP__
+#include <float.h>
+
+#ifndef DEC32_MANT_DIG
+# error "DEC32_MANT_DIG not defined"
+#endif
+
+#ifndef DEC64_MANT_DIG
+# error "DEC64_MANT_DIG not defined"
+#endif
+
+#ifndef DEC128_MANT_DIG
+# error "DEC128_MANT_DIG not defined"
+#endif
+
+#ifndef DEC32_MIN_EXP
+# error "DEC32_MIN_EXP not defined"
+#endif
+
+#ifndef DEC64_MIN_EXP
+# error "DEC64_MIN_EXP not defined"
+#endif
+
+#ifndef DEC128_MIN_EXP
+# error "DEC128_MIN_EXP not defined"
+#endif
+
+#ifndef DEC32_MAX_EXP
+# error "DEC32_MAX_EXP not defined"
+#endif
+
+#ifndef DEC64_MAX_EXP
+# error "DEC64_MAX_EXP not defined"
+#endif
+
+#ifndef DEC128_MAX_EXP
+# error "DEC128_MAX_EXP not defined"
+#endif
+
+#ifndef DEC32_MAX
+# error "DEC32_MAX not defined"
+#endif
+
+#ifndef DEC64_MAX
+# error "DEC64_MAX not defined"
+#endif
+
+#ifndef DEC128_MAX
+# error "DEC128_MAX not defined"
+#endif
+
+#ifndef DEC32_EPSILON
+# error "DEC32_EPSILON not defined"
+#endif
+
+#ifndef DEC64_EPSILON
+# error "DEC64_EPSILON not defined"
+#endif
+
+#ifndef DEC128_EPSILON
+# error "DEC128_EPSILON not defined"
+#endif
+
+#ifndef DEC32_MIN
+# error "DEC32_MIN not defined"
+#endif
+
+#ifndef DEC64_MIN
+# error "DEC64_MIN not defined"
+#endif
+
+#ifndef DEC128_MIN
+# error "DEC128_MIN not defined"
+#endif
+
+#ifndef DEC32_SUBNORMAL_MIN
+# error "DEC32_SUBNORMAL_MIN not defined"
+#endif
+
+#ifndef DEC64_SUBNORMAL_MIN
+# error "DEC64_SUBNORMAL_MIN not defined"
+#endif
+
+#ifndef DEC128_SUBNORMAL_MIN
+# error "DEC128_SUBNORMAL_MIN not defined"
+#endif
+
+/* These macros from C2X should not be defined.  */
+
+#ifdef DEC32_TRUE_MIN
+# error "DEC32_TRUE_MIN defined"
+#endif
+
+#ifdef DEC64_TRUE_MIN
+# error "DEC64_TRUE_MIN defined"
+#endif
+
+#ifdef DEC128_TRUE_MIN
+# error "DEC128_TRUE_MIN defined"
+#endif
diff --git a/gcc/testsuite/gcc.dg/dfp/ts18661-2-float-dfp-1.c b/gcc/testsuite/gcc.dg/dfp/ts18661-2-float-dfp-1.c
new file mode 100644 (file)
index 0000000..f0a0824
--- /dev/null
@@ -0,0 +1,8 @@
+/* Test DFP macros defined in <float.h> with DFP support.  TS 18661-2
+   feature test macro causes same macros to be defined as for C2X.  */
+/* { dg-do compile } */
+/* { dg-options "-std=gnu99" } */
+
+#define __STDC_WANT_IEC_60559_DFP_EXT__
+
+#include "c2x-float-dfp-1.c"