diff options
author | ngoto <ngoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-10-21 17:34:58 +0000 |
---|---|---|
committer | ngoto <ngoto@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2011-10-21 17:34:58 +0000 |
commit | 971769cd7632cd13be53c9c2e777b7f6810bfd4b (patch) | |
tree | 66f3a154e3e15244f8807c27fd409fdaec014456 /include | |
parent | cb2a69d883469d8929892facb6c48059bdfac3dd (diff) | |
download | ruby-971769cd7632cd13be53c9c2e777b7f6810bfd4b.tar.gz |
* numeric.c (rb_infinity, rb_nan): use union to prevent bus error
caused by misalignment. [Bug #5469] [ruby-dev:44657]
* include/ruby/missing.h (INFINITY, NAN): ditto
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33502 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'include')
-rw-r--r-- | include/ruby/missing.h | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/include/ruby/missing.h b/include/ruby/missing.h index 91a6540299..0edb1ec6c0 100644 --- a/include/ruby/missing.h +++ b/include/ruby/missing.h @@ -124,20 +124,27 @@ RUBY_EXTERN double lgamma_r(double, int *); RUBY_EXTERN double cbrt(double); #endif +#if !defined(INFINITY) || !defined(NAN) +union bytesequence4_or_float { + unsigned char bytesequence[4]; + float float_value; +}; +#endif + #ifdef INFINITY # define HAVE_INFINITY #else /** @internal */ -RUBY_EXTERN const unsigned char rb_infinity[]; -# define INFINITY (*(float *)rb_infinity) +RUBY_EXTERN const union bytesequence4_or_float rb_infinity; +# define INFINITY (rb_infinity.float_value) #endif #ifdef NAN # define HAVE_NAN #else /** @internal */ -RUBY_EXTERN const unsigned char rb_nan[]; -# define NAN (*(float *)rb_nan) +RUBY_EXTERN const union bytesequence4_or_float rb_nan; +# define NAN (rb_nan.float_value) #endif #ifndef isinf |