Author: rsmith Date: Thu Feb 11 13:57:37 2016 New Revision: 260577 URL: http://llvm.org/viewvc/llvm-project?rev=260577&view=rev Log: In C11, provide macros FLT_DECIMAL_DIG, DBL_DECIMAL_DIG, and LDBL_DECIMAL_DIG in <float.h>.
Patch by Jorge Teixeira! Added: cfe/trunk/test/Headers/float.c Modified: cfe/trunk/lib/Headers/float.h Modified: cfe/trunk/lib/Headers/float.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/float.h?rev=260577&r1=260576&r2=260577&view=diff ============================================================================== --- cfe/trunk/lib/Headers/float.h (original) +++ cfe/trunk/lib/Headers/float.h Thu Feb 11 13:57:37 2016 @@ -68,6 +68,9 @@ # undef FLT_TRUE_MIN # undef DBL_TRUE_MIN # undef LDBL_TRUE_MIN +# undef FLT_DECIMAL_DIG +# undef DBL_DECIMAL_DIG +# undef LDBL_DECIMAL_DIG # endif #endif @@ -119,6 +122,9 @@ # define FLT_TRUE_MIN __FLT_DENORM_MIN__ # define DBL_TRUE_MIN __DBL_DENORM_MIN__ # define LDBL_TRUE_MIN __LDBL_DENORM_MIN__ +# define FLT_DECIMAL_DIG __FLT_DECIMAL_DIG__ +# define DBL_DECIMAL_DIG __DBL_DECIMAL_DIG__ +# define LDBL_DECIMAL_DIG __LDBL_DECIMAL_DIG__ #endif #endif /* __FLOAT_H */ Added: cfe/trunk/test/Headers/float.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Headers/float.c?rev=260577&view=auto ============================================================================== --- cfe/trunk/test/Headers/float.c (added) +++ cfe/trunk/test/Headers/float.c Thu Feb 11 13:57:37 2016 @@ -0,0 +1,211 @@ +// RUN: %clang_cc1 -fsyntax-only -verify -std=c89 -ffreestanding %s +// RUN: %clang_cc1 -fsyntax-only -verify -std=c99 -ffreestanding %s +// RUN: %clang_cc1 -fsyntax-only -verify -std=c11 -ffreestanding %s +// expected-no-diagnostics + +/* Basic conformance checks against the N1570 draft of C11 Std. */ +/* + 5.2.4.2.2p11, pp. 30 +*/ +#include <float.h> + +#ifndef FLT_RADIX + #error "Mandatory macro FLT_RADIX is missing." +#elif FLT_RADIX < 2 + #error "Mandatory macro FLT_RADIX is invalid." +#endif + + +#ifndef FLT_MANT_DIG + #error "Mandatory macro FLT_MANT_DIG is missing." +#elif FLT_MANT_DIG < 1 + #error "Mandatory macro FLT_MANT_DIG is invalid." +#endif +#ifndef DBL_MANT_DIG + #error "Mandatory macro DBL_MANT_DIG is missing." +#elif DBL_MANT_DIG < 1 + #error "Mandatory macro DBL_MANT_DIG is invalid." +#endif +#ifndef LDBL_MANT_DIG + #error "Mandatory macro LDBL_MANT_DIG is missing." +#elif LDBL_MANT_DIG < 1 + #error "Mandatory macro LDBL_MANT_DIG is invalid." +#endif +#if ((FLT_MANT_DIG > DBL_MANT_DIG) || (DBL_MANT_DIG > LDBL_MANT_DIG)) + #error "Mandatory macros {FLT,DBL,LDBL}_MANT_DIG are invalid." +#endif + + +#if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) + #ifndef FLT_DECIMAL_DIG + #error "Mandatory macro FLT_DECIMAL_DIG is missing." + #elif FLT_DECIMAL_DIG < 6 + #error "Mandatory macro FLT_DECIMAL_DIG is invalid." + #endif + #ifndef DBL_DECIMAL_DIG + #error "Mandatory macro DBL_DECIMAL_DIG is missing." + #elif DBL_DECIMAL_DIG < 10 + #error "Mandatory macro DBL_DECIMAL_DIG is invalid." + #endif + #ifndef LDBL_DECIMAL_DIG + #error "Mandatory macro LDBL_DECIMAL_DIG is missing." + #elif LDBL_DECIMAL_DIG < 10 + #error "Mandatory macro LDBL_DECIMAL_DIG is invalid." + #endif + #if ((FLT_DECIMAL_DIG > DBL_DECIMAL_DIG) || (DBL_DECIMAL_DIG > LDBL_DECIMAL_DIG)) + #error "Mandatory macros {FLT,DBL,LDBL}_DECIMAL_DIG are invalid." + #endif +#else + #ifdef FLT_DECIMAL_DIG + #error "Macro FLT_DECIMAL_DIG should not be defined." + #endif + #ifdef DBL_DECIMAL_DIG + #error "Macro DBL_DECIMAL_DIG should not be defined." + #endif + #ifdef LDBL_DECIMAL_DIG + #error "Macro LDBL_DECIMAL_DIG should not be defined." + #endif +#endif + + +#ifndef DECIMAL_DIG + #error "Mandatory macro DECIMAL_DIG is missing." +#elif DECIMAL_DIG < 10 + #error "Mandatory macro DECIMAL_DIG is invalid." +#endif + + +#ifndef FLT_DIG + #error "Mandatory macro FLT_DIG is missing." +#elif FLT_DIG < 6 + #error "Mandatory macro FLT_DIG is invalid." +#endif +#ifndef DBL_DIG + #error "Mandatory macro DBL_DIG is missing." +#elif DBL_DIG < 10 + #error "Mandatory macro DBL_DIG is invalid." +#endif +#ifndef LDBL_DIG + #error "Mandatory macro LDBL_DIG is missing." +#elif LDBL_DIG < 10 + #error "Mandatory macro LDBL_DIG is invalid." +#endif +#if ((FLT_DIG > DBL_DIG) || (DBL_DIG > LDBL_DIG)) + #error "Mandatory macros {FLT,DBL,LDBL}_DIG, are invalid." +#endif + + +#ifndef FLT_MIN_EXP + #error "Mandatory macro _MIN_EXP is missing." +#elif FLT_MIN_EXP > -2 + #error "Mandatory macro _MIN_EXP is invalid." +#endif +#ifndef DBL_MIN_EXP + #error "Mandatory macro DBL_MIN_EXP is missing." +#elif DBL_MIN_EXP > -2 + #error "Mandatory macro DBL_MIN_EXP is invalid." +#endif +#ifndef LDBL_MIN_EXP + #error "Mandatory macro LDBL_MIN_EXP is missing." +#elif LDBL_MIN_EXP > -2 + #error "Mandatory macro LDBL_MIN_EXP is invalid." +#endif +#if ((FLT_MIN_EXP < DBL_MIN_EXP) || (DBL_MIN_EXP < LDBL_MIN_EXP)) + #error "Mandatory macros {FLT,DBL,LDBL}_MIN_EXP are invalid." +#endif + + +#ifndef FLT_MIN_10_EXP + #error "Mandatory macro FLT_MIN_10_EXP is missing." +#elif FLT_MIN_10_EXP > -37 + #error "Mandatory macro FLT_MIN_10_EXP is invalid." +#endif +#ifndef DBL_MIN_10_EXP + #error "Mandatory macro DBL_MIN_10_EXP is missing." +#elif DBL_MIN_10_EXP > -37 + #error "Mandatory macro DBL_MIN_10_EXP is invalid." +#endif +#ifndef LDBL_MIN_10_EXP + #error "Mandatory macro LDBL_MIN_10_EXP is missing." +#elif LDBL_MIN_10_EXP > -37 + #error "Mandatory macro LDBL_MIN_10_EXP is invalid." +#endif +#if ((FLT_MIN_10_EXP < DBL_MIN_10_EXP) || (DBL_MIN_10_EXP < LDBL_MIN_10_EXP)) + #error "Mandatory macros {FLT,DBL,LDBL}_MIN_10_EXP are invalid." +#endif + + +#ifndef FLT_MAX_EXP + #error "Mandatory macro FLT_MAX_EXP is missing." +#elif FLT_MAX_EXP < 2 + #error "Mandatory macro FLT_MAX_EXP is invalid." +#endif +#ifndef DBL_MAX_EXP + #error "Mandatory macro DBL_MAX_EXP is missing." +#elif DBL_MAX_EXP < 2 + #error "Mandatory macro DBL_MAX_EXP is invalid." +#endif +#ifndef LDBL_MAX_EXP + #error "Mandatory macro LDBL_MAX_EXP is missing." +#elif LDBL_MAX_EXP < 2 + #error "Mandatory macro LDBL_MAX_EXP is invalid." +#endif +#if ((FLT_MAX_EXP > DBL_MAX_EXP) || (DBL_MAX_EXP > LDBL_MAX_EXP)) + #error "Mandatory macros {FLT,DBL,LDBL}_MAX_EXP are invalid." +#endif + + +#ifndef FLT_MAX_10_EXP + #error "Mandatory macro FLT_MAX_10_EXP is missing." +#elif FLT_MAX_10_EXP < 37 + #error "Mandatory macro FLT_MAX_10_EXP is invalid." +#endif +#ifndef DBL_MAX_10_EXP + #error "Mandatory macro DBL_MAX_10_EXP is missing." +#elif DBL_MAX_10_EXP < 37 + #error "Mandatory macro DBL_MAX_10_EXP is invalid." +#endif +#ifndef LDBL_MAX_10_EXP + #error "Mandatory macro LDBL_MAX_10_EXP is missing." +#elif LDBL_MAX_10_EXP < 37 + #error "Mandatory macro LDBL_MAX_10_EXP is invalid." +#endif +#if ((FLT_MAX_10_EXP > DBL_MAX_10_EXP) || (DBL_MAX_10_EXP > LDBL_MAX_10_EXP)) + #error "Mandatory macros {FLT,DBL,LDBL}_MAX_10_EXP are invalid." +#endif + + +/* Internal consistency checks */ +_Static_assert(FLT_RADIX == __FLT_RADIX__, ""); + +_Static_assert(FLT_MANT_DIG == __FLT_MANT_DIG__, ""); +_Static_assert(DBL_MANT_DIG == __DBL_MANT_DIG__, ""); +_Static_assert(LDBL_MANT_DIG == __LDBL_MANT_DIG__, ""); + +#if __STDC_VERSION__ >= 201112L || !defined(__STRICT_ANSI__) +_Static_assert(FLT_DECIMAL_DIG == __FLT_DECIMAL_DIG__, ""); +_Static_assert(DBL_DECIMAL_DIG == __DBL_DECIMAL_DIG__, ""); +_Static_assert(LDBL_DECIMAL_DIG == __LDBL_DECIMAL_DIG__, ""); +#endif + +_Static_assert(DECIMAL_DIG == __DECIMAL_DIG__, ""); + +_Static_assert(FLT_DIG == __FLT_DIG__, ""); +_Static_assert(DBL_DIG == __DBL_DIG__, ""); +_Static_assert(LDBL_DIG == __LDBL_DIG__, ""); + +_Static_assert(FLT_MIN_EXP == __FLT_MIN_EXP__, ""); +_Static_assert(DBL_MIN_EXP == __DBL_MIN_EXP__, ""); +_Static_assert(LDBL_MIN_EXP == __LDBL_MIN_EXP__, ""); + +_Static_assert(FLT_MIN_10_EXP == __FLT_MIN_10_EXP__, ""); +_Static_assert(DBL_MIN_10_EXP == __DBL_MIN_10_EXP__, ""); +_Static_assert(LDBL_MIN_10_EXP == __LDBL_MIN_10_EXP__, ""); + +_Static_assert(FLT_MAX_EXP == __FLT_MAX_EXP__, ""); +_Static_assert(DBL_MAX_EXP == __DBL_MAX_EXP__, ""); +_Static_assert(LDBL_MAX_EXP == __LDBL_MAX_EXP__, ""); + +_Static_assert(FLT_MAX_10_EXP == __FLT_MAX_10_EXP__, ""); +_Static_assert(DBL_MAX_10_EXP == __DBL_MAX_10_EXP__, ""); +_Static_assert(LDBL_MAX_10_EXP == __LDBL_MAX_10_EXP__, ""); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits