standards/63935: [patch] Fix C90 namespace pollution in <float.h>

Stefan Farfeleder stefan at fafoe.narf.at
Mon Mar 8 09:10:11 PST 2004


>Number:         63935
>Category:       standards
>Synopsis:       [patch] Fix C90 namespace pollution in <float.h>
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-standards
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Mar 08 09:10:10 PST 2004
>Closed-Date:
>Last-Modified:
>Originator:     Stefan Farfeleder
>Release:        FreeBSD 5.2-CURRENT i386
>Organization:
>Environment:
System: FreeBSD wombat.fafoe.narf.at 5.2-CURRENT FreeBSD 5.2-CURRENT #16: Tue Mar 2 19:09:53 CET 2004 stefan at wombat.fafoe.narf.at:/usr/home/stefan/freebsd/obj/usr/home/stefan/freebsd/src/sys/WOMBAT i386

>Description:
C99 added the macros FLT_EVAL_METHOD and DECIMAL_DIG to <float.h>.  Since these
identifiers aren't in the namespace reserved for the implementation, a strictly
compliant C90 program is allowed to use them.  They must not be visible in a
C90 compilation mode like they currently are.

>How-To-Repeat:
$ cat test.c
#include <float.h>
int
main(void)
{
	int FLT_EVAL_METHOD, DECIMAL_DIG;
	return 0;
}
$ c89 -D_ANSI_SOURCE test.c
test.c: In function `main':
test.c:6: error: syntax error before '-' token

>Fix:
--- float.h.diff begins here ---
Index: src/sys/alpha/include/float.h
===================================================================
RCS file: /usr/home/ncvs/src/sys/alpha/include/float.h,v
retrieving revision 1.4
diff -u -r1.4 float.h
--- src/sys/alpha/include/float.h	8 Feb 2003 20:37:54 -0000	1.4
+++ src/sys/alpha/include/float.h	8 Mar 2004 15:31:24 -0000
@@ -45,8 +45,10 @@
 
 #define FLT_RADIX	2		/* b */
 #define FLT_ROUNDS	__flt_rounds()
+#if __ISO_C_VISIBLE >= 1999
 #define	FLT_EVAL_METHOD	0		/* no promotions */
 #define	DECIMAL_DIG	17		/* max precision in decimal digits */
+#endif
 
 #define FLT_MANT_DIG	24		/* p */
 #define FLT_EPSILON	1.19209290E-07F	/* b**(1-p) */
Index: src/sys/amd64/include/float.h
===================================================================
RCS file: /usr/home/ncvs/src/sys/amd64/include/float.h,v
retrieving revision 1.10
diff -u -r1.10 float.h
--- src/sys/amd64/include/float.h	8 Feb 2003 20:37:54 -0000	1.10
+++ src/sys/amd64/include/float.h	8 Mar 2004 15:57:46 -0000
@@ -37,10 +37,14 @@
 #ifndef _MACHINE_FLOAT_H_
 #define _MACHINE_FLOAT_H_ 1
 
+#include <sys/cdefs.h>
+
 #define FLT_RADIX	2		/* b */
 #define FLT_ROUNDS	1		/* FP addition rounds to nearest */
+#if __ISO_C_VISIBLE >= 1999
 #define	FLT_EVAL_METHOD	(-1)		/* i387 semantics are...interesting */
 #define	DECIMAL_DIG	21		/* max precision in decimal digits */
+#endif
 
 #define FLT_MANT_DIG	24		/* p */
 #define FLT_EPSILON	1.19209290E-07F	/* b**(1-p) */
Index: src/sys/i386/include/float.h
===================================================================
RCS file: /usr/home/ncvs/src/sys/i386/include/float.h,v
retrieving revision 1.10
diff -u -r1.10 float.h
--- src/sys/i386/include/float.h	8 Feb 2003 20:37:54 -0000	1.10
+++ src/sys/i386/include/float.h	8 Mar 2004 15:57:52 -0000
@@ -37,10 +37,14 @@
 #ifndef _MACHINE_FLOAT_H_
 #define _MACHINE_FLOAT_H_ 1
 
+#include <sys/cdefs.h>
+
 #define FLT_RADIX	2		/* b */
 #define FLT_ROUNDS	1		/* FP addition rounds to nearest */
+#if __ISO_C_VISIBLE >= 1999
 #define	FLT_EVAL_METHOD	(-1)		/* i387 semantics are...interesting */
 #define	DECIMAL_DIG	21		/* max precision in decimal digits */
+#endif
 
 #define FLT_MANT_DIG	24		/* p */
 #define FLT_EPSILON	1.19209290E-07F	/* b**(1-p) */
Index: src/sys/ia64/include/float.h
===================================================================
RCS file: /usr/home/ncvs/src/sys/ia64/include/float.h,v
retrieving revision 1.4
diff -u -r1.4 float.h
--- src/sys/ia64/include/float.h	27 Mar 2003 20:38:22 -0000	1.4
+++ src/sys/ia64/include/float.h	8 Mar 2004 15:32:04 -0000
@@ -41,8 +41,10 @@
 
 #define FLT_RADIX	2		/* b */
 #define FLT_ROUNDS	1		/* FP addition rounds to nearest */
+#if __ISO_C_VISIBLE >= 1999
 #define	FLT_EVAL_METHOD	0		/* no promotions */
 #define	DECIMAL_DIG	35		/* max precision in decimal digits */
+#endif
 
 #define FLT_MANT_DIG	24		/* p */
 #define FLT_EPSILON	1.19209290E-07F	/* b**(1-p) */
Index: src/sys/powerpc/include/float.h
===================================================================
RCS file: /usr/home/ncvs/src/sys/powerpc/include/float.h,v
retrieving revision 1.3
diff -u -r1.3 float.h
--- src/sys/powerpc/include/float.h	21 Jan 2004 04:56:39 -0000	1.3
+++ src/sys/powerpc/include/float.h	8 Mar 2004 15:58:00 -0000
@@ -38,10 +38,14 @@
 #ifndef _MACHINE_FLOAT_H_
 #define _MACHINE_FLOAT_H_ 1
 
+#include <sys/cdefs.h>
+
 #define FLT_RADIX	2		/* b */
 #define FLT_ROUNDS	1		/* FP addition rounds to nearest */
+#if __ISO_C_VISIBLE >= 1999
 #define	FLT_EVAL_METHOD	1		/* operands promoted to double */
 #define	DECIMAL_DIG	35		/* max precision in decimal digits */
+#endif
 
 #define FLT_MANT_DIG	24		/* p */
 #define FLT_EPSILON	1.19209290E-07F	/* b**(1-p) */
Index: src/sys/sparc64/include/float.h
===================================================================
RCS file: /usr/home/ncvs/src/sys/sparc64/include/float.h,v
retrieving revision 1.3
diff -u -r1.3 float.h
--- src/sys/sparc64/include/float.h	8 Feb 2003 20:37:55 -0000	1.3
+++ src/sys/sparc64/include/float.h	8 Mar 2004 15:31:50 -0000
@@ -55,8 +55,10 @@
 
 #define FLT_RADIX	2		/* b */
 #define FLT_ROUNDS	__flt_rounds()
+#if __ISO_C_VISIBLE >= 1999
 #define	FLT_EVAL_METHOD	0		/* no promotion */
 #define	DECIMAL_DIG	35		/* max precision in decimal digits */
+#endif
 
 #define FLT_MANT_DIG	24		/* p */
 #define FLT_EPSILON	1.19209290E-7F	/* b**(1-p) */
--- float.h.diff ends here ---

>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-standards mailing list