1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-28 16:00:22 +02:00

avoid type-punning errors in guile_ieee_init on OSF

* libguile/numbers.c (guile_ieee_init): Avoid type-punning errors on
  OSF. Thanks to Jay Krell for the report.
This commit is contained in:
Andy Wingo 2010-06-10 14:34:51 +02:00
parent 899a17a783
commit 2462fad237

View file

@ -1,4 +1,4 @@
/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. /* Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
* *
* Portions Copyright 1990, 1991, 1992, 1993 by AT&T Bell Laboratories * Portions Copyright 1990, 1991, 1992, 1993 by AT&T Bell Laboratories
* and Bellcore. See scm_divide. * and Bellcore. See scm_divide.
@ -620,7 +620,14 @@ guile_ieee_init (void)
#elif HAVE_DINFINITY #elif HAVE_DINFINITY
/* OSF */ /* OSF */
extern unsigned int DINFINITY[2]; extern unsigned int DINFINITY[2];
guile_Inf = (*((double *) (DINFINITY))); union
{
double d;
int i[2];
} alias;
alias.i[0] = DINFINITY[0];
alias.i[1] = DINFINITY[1];
guile_Inf = alias.d;
#else #else
double tmp = 1e+10; double tmp = 1e+10;
guile_Inf = tmp; guile_Inf = tmp;
@ -651,7 +658,14 @@ guile_ieee_init (void)
{ {
/* OSF */ /* OSF */
extern unsigned int DQNAN[2]; extern unsigned int DQNAN[2];
guile_NaN = (*((double *)(DQNAN))); union
{
double d;
int i[2];
} alias;
alias.i[0] = DQNAN[0];
alias.i[1] = DQNAN[1];
guile_NaN = alias.d;
} }
#else #else
guile_NaN = guile_Inf / guile_Inf; guile_NaN = guile_Inf / guile_Inf;