ruby-changes:45666
From: nobu <ko1@a...>
Date: Tue, 28 Feb 2017 10:10:43 +0900 (JST)
Subject: [ruby-changes:45666] nobu:r57739 (trunk): numeric.c: suppress warning
nobu 2017-02-28 10:10:38 +0900 (Tue, 28 Feb 2017) New Revision: 57739 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=57739 Log: numeric.c: suppress warning * numeric.c (DEFINE_INT_SQRT): suppress a type-limits warning where int is always smaller than double. Modified files: trunk/numeric.c Index: numeric.c =================================================================== --- numeric.c (revision 57738) +++ numeric.c (revision 57739) @@ -5132,8 +5132,7 @@ int_truncate(int argc, VALUE* argv, VALU https://github.com/ruby/ruby/blob/trunk/numeric.c#L5132 rettype \ prefix##_isqrt(argtype n) \ { \ - if (sizeof(n) * CHAR_BIT > DBL_MANT_DIG && \ - n >= ((argtype)1UL << DBL_MANT_DIG)) { \ + if (!argtype##_IN_DOUBLE_P(n)) { \ unsigned int b = bit_length(n); \ argtype t; \ rettype x = (rettype)(n >> (b/2+1)); \ @@ -5144,8 +5143,20 @@ prefix##_isqrt(argtype n) \ https://github.com/ruby/ruby/blob/trunk/numeric.c#L5143 return (rettype)sqrt((double)n); \ } -DEFINE_INT_SQRT(unsigned long, rb_ulong, unsigned long) -#if SIZEOF_BDIGIT*2 > SIZEOF_LONG +#if SIZEOF_LONG*CHAR_BIT > DBL_MANT_DIG +# define RB_ULONG_IN_DOUBLE_P(n) ((n) < (1UL << DBL_MANT_DIG)) +#else +# define RB_ULONG_IN_DOUBLE_P(n) 1 +#endif +#define RB_ULONG unsigned long +DEFINE_INT_SQRT(unsigned long, rb_ulong, RB_ULONG) + +#if 2*SIZEOF_BDIGIT > SIZEOF_LONG +# if 2*SIZEOF_BDIGIT*CHAR_BIT > DBL_MANT_DIG +# define BDIGIT_DBL_IN_DOUBLE_P(n) ((n) < ((BDIGIT_DBL)1UL << DBL_MANT_DIG)) +# else +# define BDIGIT_DBL_IN_DOUBLE_P(n) 1 +# endif DEFINE_INT_SQRT(BDIGIT, rb_bdigit_dbl, BDIGIT_DBL) #endif -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/