Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 May 2006 22:22:20 +0200 (CEST)
From:      Thierry Thomas <thierry@FreeBSD.org>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   standards/97928: fenv.h: fix to compile with gcc > 4.0.
Message-ID:  <20060525202220.980E61148C@graf.pompo.net>
Resent-Message-ID: <200605252030.k4PKUIf1076456@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         97928
>Category:       standards
>Synopsis:       fenv.h: fix to compile with gcc > 4.0.
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    freebsd-standards
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          update
>Submitter-Id:   current-users
>Arrival-Date:   Thu May 25 20:30:18 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator:     Thierry Thomas
>Release:        FreeBSD 6.1-STABLE i386
>Organization:
Kabbale Eros
>Environment:
System: FreeBSD graf.pompo.net 6.1-STABLE FreeBSD 6.1-STABLE #0: Fri May 12 07:08:06 CEST 2006 thierry@graf.pompo.net:/usr/obj/usr/src/sys/GRAF060511 i386


	
>Description:
	When preparing the next version of ports/french/aster, with MUMPS
	support, which requires gfortran and gcc41, I'm stuck with an
	error in <fenv.h>:

	In file included from inisig.c:108:
	/usr/include/fenv.h: In function 'inisig_':
	/usr/include/fenv.h:112: error: invalid storage class for function 'feclearexcept'
	/usr/include/fenv.h:133: error: invalid storage class for function 'fegetexceptflag'
	/usr/include/fenv.h:150: error: invalid storage class for function 'fetestexcept'
	/usr/include/fenv.h:163: error: invalid storage class for function 'fegetround'
	/usr/include/fenv.h:178: error: invalid storage class for function 'fesetround'
	/usr/include/fenv.h:204: error: invalid storage class for function 'fesetenv'
	/usr/include/fenv.h:225: error: invalid storage class for function 'fegetexcept'

>How-To-Repeat:
	Try to compile something including <fenv.h> with gcc41 (or later).

>Fix:
	The following patch, which remove the clause "static", fixes the
	problem for me. It should surely be applied to the other
	achitectures too, but I have only tested it on i386.

--- fenv.h.diff begins here ---
--- src/lib/msun/i387/fenv.h.orig	Thu Mar 17 23:21:46 2005
+++ src/lib/msun/i387/fenv.h	Thu May 25 22:04:42 2006
@@ -107,7 +107,7 @@
 #define	__ldmxcsr(__csr)	__asm __volatile("ldmxcsr %0" : : "m" (__csr))
 #define	__stmxcsr(__csr)	__asm __volatile("stmxcsr %0" : "=m" (*(__csr)))
 
-static __inline int
+__inline int
 feclearexcept(int __excepts)
 {
 	fenv_t __env;
@@ -128,7 +128,7 @@
 	return (0);
 }
 
-static __inline int
+__inline int
 fegetexceptflag(fexcept_t *__flagp, int __excepts)
 {
 	int __mxcsr, __status;
@@ -145,7 +145,7 @@
 int fesetexceptflag(const fexcept_t *__flagp, int __excepts);
 int feraiseexcept(int __excepts);
 
-static __inline int
+__inline int
 fetestexcept(int __excepts)
 {
 	int __mxcsr, __status;
@@ -158,7 +158,7 @@
 	return ((__status | __mxcsr) & __excepts);
 }
 
-static __inline int
+__inline int
 fegetround(void)
 {
 	int __control;
@@ -173,7 +173,7 @@
 	return (__control & _ROUND_MASK);
 }
 
-static __inline int
+__inline int
 fesetround(int __round)
 {
 	int __mxcsr, __control;
@@ -199,7 +199,7 @@
 int fegetenv(fenv_t *__envp);
 int feholdexcept(fenv_t *__envp);
 
-static __inline int
+__inline int
 fesetenv(const fenv_t *__envp)
 {
 	fenv_t __env = *__envp;
@@ -220,7 +220,7 @@
 int feenableexcept(int __mask);
 int fedisableexcept(int __mask);
 
-static __inline int
+__inline int
 fegetexcept(void)
 {
 	int __control;
--- fenv.h.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060525202220.980E61148C>