зеркало из https://github.com/github/ruby.git
define PACKED_STRUCT_UNALIGNED correctly
Defining PACKED_STRUCT_UNALIGNED to a noop in ruby/config.h (via `configure') prevents the definition in include/ruby/defines.h from working This should have been fixed in r46914, so there's a size regression for some objects since Ruby 2.2+. I do not believe we can backport to existing releases, either, since it can affect ABI. Add a test for Time objects on common x86-based platforms to check for future regressions. * configure.in: remove PACKED_STRUCT_UNALIGNED definition * test/ruby/test_time.rb (test_memsize): new test for x86 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58442 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
966bfb07f6
Коммит
7e5462b36f
|
@ -1642,13 +1642,11 @@ AC_CACHE_CHECK(packed struct attribute, rb_cv_packed_struct,
|
|||
PACKED_STRUCT(struct { int a; });], [],
|
||||
[rb_cv_packed_struct=$mac; break])
|
||||
done])
|
||||
packed_struct_unaligned=x
|
||||
if test "$rb_cv_packed_struct" != no; then
|
||||
AC_DEFINE_UNQUOTED([PACKED_STRUCT(x)], [$rb_cv_packed_struct])
|
||||
else
|
||||
AC_DEFINE_UNQUOTED([PACKED_STRUCT(x)], x)
|
||||
fi
|
||||
AC_DEFINE_UNQUOTED(PACKED_STRUCT_UNALIGNED(x), $packed_struct_unaligned)
|
||||
|
||||
AC_DEFUN([RUBY_CHECK_PRINTF_PREFIX], [
|
||||
AC_CACHE_CHECK([for printf prefix for $1], [rb_cv_pri_prefix_]AS_TR_SH($1),[
|
||||
|
|
|
@ -1110,4 +1110,21 @@ class TestTime < Test::Unit::TestCase
|
|||
end.new
|
||||
assert_raise_with_message(TypeError, /Inexact/) {Time.at(x)}
|
||||
end
|
||||
|
||||
def test_memsize
|
||||
# Time objects are common in some code, try to keep them small
|
||||
skip "Time object size test" if /^(?:i.?86|x86_64)-linux/ !~ RUBY_PLATFORM
|
||||
require 'objspace'
|
||||
t = Time.at(0)
|
||||
size = GC::INTERNAL_CONSTANTS[:RVALUE_SIZE]
|
||||
case size
|
||||
when 20 then expect = 50
|
||||
when 40 then expect = 86
|
||||
else
|
||||
flunk "Unsupported RVALUE_SIZE=#{size}, update test_memsize"
|
||||
end
|
||||
assert_equal expect, ObjectSpace.memsize_of(t)
|
||||
rescue LoadError => e
|
||||
skip "failed to load objspace: #{e.message}"
|
||||
end
|
||||
end
|
||||
|
|
Загрузка…
Ссылка в новой задаче