diff mbox

Go patch committed: Provide matherr function

Message ID ydd62ffrisz.fsf@manam.CeBiTec.Uni-Bielefeld.DE
State New
Headers show

Commit Message

Rainer Orth Feb. 9, 2012, 5:57 p.m. UTC
Ian Lance Taylor <iant@google.com> writes:

>> Unfortunately, this breaks the libgo build on Solaris 8 and 9:
>>
>> /vol/gcc/src/hg/trunk/local/libgo/runtime/go-matherr.c: In function 'matherr':
>> /vol/gcc/src/hg/trunk/local/libgo/runtime/go-matherr.c:38:17: error: 'NAN' undeclared (first use in this function)
>> /vol/gcc/src/hg/trunk/local/libgo/runtime/go-matherr.c:38:17: note: each undeclared identifier is reported only once for each function it appears in
>> /vol/gcc/src/hg/trunk/local/libgo/runtime/go-matherr.c:68:28: error: 'INFINITY' undeclared (first use in this function)
>> make[4]: *** [go-matherr.lo] Error 1
>>
>> I couldn't find an appproprite replacement in the system headers.
>
> Hmmm, INFINITY and NAN are in C99.

True, but full C99 support was only introduced in Solaris 10.

> Does it work to do something like
>
> #ifndef INFINITY
> #define INFINITY (1.0 / 0.0)
> #endif
>
> #ifndef NAN
> #define NAN (0.0 / 0.0)
> #endif
>
> ?

I could give it a try once the current bootstraps are finished.  For the
moment I've shamelessly adapted the following from the __GNUC__ section
of Solaris 11 <iso/math_c99.h>:
> Another possibility for NAN would to call nan(), if that is available.

It's not, unfortunately.

	Rainer
diff mbox

Patch

diff --git a/libgo/runtime/go-matherr.c b/libgo/runtime/go-matherr.c
--- a/libgo/runtime/go-matherr.c
+++ b/libgo/runtime/go-matherr.c
@@ -24,6 +24,14 @@ 
 
 #define PI 3.14159265358979323846264338327950288419716939937510582097494459
 
+#ifndef INFINITY
+#define INFINITY (__builtin_inff ())
+#endif
+
+#ifndef NAN
+#define NAN (__builtin_nanf (""))
+#endif
+
 int
 matherr (struct exception* e)
 {