зеркало из https://github.com/github/ruby.git
Allow compilation of C extensions with `-Wconversion`
C extension maintainers can now compile with this warning option and the Ruby header files will generate no warnings. [Feature #20507]
This commit is contained in:
Родитель
9e9f1d9301
Коммит
1b8ba1551b
|
@ -114,11 +114,11 @@ RB_INT2FIX(long i)
|
|||
|
||||
/* :NOTE: VALUE can be wider than long. As j being unsigned, 2j+1 is fully
|
||||
* defined. Also it can be compiled into a single LEA instruction. */
|
||||
const unsigned long j = i;
|
||||
const unsigned long j = RBIMPL_CAST((unsigned long)i);
|
||||
const unsigned long k = (j << 1) + RUBY_FIXNUM_FLAG;
|
||||
const long l = k;
|
||||
const long l = RBIMPL_CAST((long)k);
|
||||
const SIGNED_VALUE m = l; /* Sign extend */
|
||||
const VALUE n = m;
|
||||
const VALUE n = RBIMPL_CAST((VALUE)m);
|
||||
|
||||
RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(n));
|
||||
return n;
|
||||
|
@ -166,7 +166,7 @@ rbimpl_fix2long_by_idiv(VALUE x)
|
|||
/* :NOTE: VALUE can be wider than long. (x-1)/2 never overflows because
|
||||
* RB_FIXNUM_P(x) holds. Also it has no portability issue like y>>1
|
||||
* below. */
|
||||
const SIGNED_VALUE y = x - RUBY_FIXNUM_FLAG;
|
||||
const SIGNED_VALUE y = RBIMPL_CAST((SIGNED_VALUE)(x - RUBY_FIXNUM_FLAG));
|
||||
const SIGNED_VALUE z = y / 2;
|
||||
const long w = RBIMPL_CAST((long)z);
|
||||
|
||||
|
@ -193,7 +193,7 @@ rbimpl_fix2long_by_shift(VALUE x)
|
|||
|
||||
/* :NOTE: VALUE can be wider than long. If right shift is arithmetic, this
|
||||
* is noticeably faster than above. */
|
||||
const SIGNED_VALUE y = x;
|
||||
const SIGNED_VALUE y = RBIMPL_CAST((SIGNED_VALUE)x);
|
||||
const SIGNED_VALUE z = y >> 1;
|
||||
const long w = RBIMPL_CAST((long)z);
|
||||
|
||||
|
@ -252,7 +252,7 @@ static inline unsigned long
|
|||
rb_fix2ulong(VALUE x)
|
||||
{
|
||||
RBIMPL_ASSERT_OR_ASSUME(RB_FIXNUM_P(x));
|
||||
return rb_fix2long(x);
|
||||
return RBIMPL_CAST((unsigned long)rb_fix2long(x));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -323,7 +323,7 @@ static inline VALUE
|
|||
rb_ulong2num_inline(unsigned long v)
|
||||
{
|
||||
if (RB_POSFIXABLE(v))
|
||||
return RB_LONG2FIX(v);
|
||||
return RB_LONG2FIX(RBIMPL_CAST((long)v));
|
||||
else
|
||||
return rb_uint2big(v);
|
||||
}
|
||||
|
|
|
@ -127,7 +127,7 @@ static inline unsigned LONG_LONG
|
|||
rb_num2ull_inline(VALUE x)
|
||||
{
|
||||
if (RB_FIXNUM_P(x))
|
||||
return RB_FIX2LONG(x);
|
||||
return RBIMPL_CAST((unsigned LONG_LONG)RB_FIX2LONG(x));
|
||||
else
|
||||
return rb_num2ull(x);
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ RBIMPL_ATTR_ARTIFICIAL()
|
|||
static inline VALUE
|
||||
RB_ST2FIX(st_data_t i)
|
||||
{
|
||||
SIGNED_VALUE x = i;
|
||||
SIGNED_VALUE x = RBIMPL_CAST((SIGNED_VALUE)i);
|
||||
|
||||
if (x >= 0) {
|
||||
x &= RUBY_FIXNUM_MAX;
|
||||
|
@ -69,7 +69,7 @@ RB_ST2FIX(st_data_t i)
|
|||
|
||||
RBIMPL_ASSERT_OR_ASSUME(RB_FIXABLE(x));
|
||||
unsigned long y = RBIMPL_CAST((unsigned long)x);
|
||||
return RB_LONG2FIX(y);
|
||||
return RB_LONG2FIX(RBIMPL_CAST((long)y));
|
||||
}
|
||||
|
||||
#endif /* RBIMPL_ARITHMETIC_ST_DATA_T_H */
|
||||
|
|
|
@ -80,7 +80,7 @@ enum ruby_encoding_consts {
|
|||
static inline void
|
||||
RB_ENCODING_SET_INLINED(VALUE obj, int encindex)
|
||||
{
|
||||
VALUE f = /* upcast */ encindex;
|
||||
VALUE f = /* upcast */ RBIMPL_CAST((VALUE)encindex);
|
||||
|
||||
f <<= RUBY_ENCODING_SHIFT;
|
||||
RB_FL_UNSET_RAW(obj, RUBY_ENCODING_MASK);
|
||||
|
|
|
@ -643,7 +643,7 @@ rbimpl_size_mul_or_raise(size_t x, size_t y)
|
|||
static inline void *
|
||||
rb_alloc_tmp_buffer2(volatile VALUE *store, long count, size_t elsize)
|
||||
{
|
||||
const size_t total_size = rbimpl_size_mul_or_raise(count, elsize);
|
||||
const size_t total_size = rbimpl_size_mul_or_raise(RBIMPL_CAST((size_t)count), elsize);
|
||||
const size_t cnt = (total_size + sizeof(VALUE) - 1) / sizeof(VALUE);
|
||||
return rb_alloc_tmp_buffer_with_count(store, total_size, cnt);
|
||||
}
|
||||
|
|
|
@ -156,7 +156,7 @@ RB_TEST(VALUE obj)
|
|||
*
|
||||
* RTEST(v) can be 0 if and only if (v == Qfalse || v == Qnil).
|
||||
*/
|
||||
return obj & ~RUBY_Qnil;
|
||||
return obj & RBIMPL_CAST((VALUE)~RUBY_Qnil);
|
||||
}
|
||||
|
||||
RBIMPL_ATTR_CONST()
|
||||
|
@ -226,7 +226,7 @@ RB_NIL_OR_UNDEF_P(VALUE obj)
|
|||
*
|
||||
* NIL_OR_UNDEF_P(v) can be true only when v is Qundef or Qnil.
|
||||
*/
|
||||
const VALUE mask = ~(RUBY_Qundef ^ RUBY_Qnil);
|
||||
const VALUE mask = RBIMPL_CAST((VALUE)~(RUBY_Qundef ^ RUBY_Qnil));
|
||||
const VALUE common_bits = RUBY_Qundef & RUBY_Qnil;
|
||||
return (obj & mask) == common_bits;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче