summaryrefslogtreecommitdiff
path: root/gc.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-10-12 14:03:24 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2010-10-12 14:03:24 +0000
commit0172f3181ff592f3ce20b5a04c1eff603f48f557 (patch)
tree96b3d956e0e61965c9720ccd657a83aaea574cbc /gc.c
parentf5bcc56bcd3ca55131d5d766f953c5d52b2924cc (diff)
* gc.c (mark_current_machine_context): suppress warnings.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@29459 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'gc.c')
-rw-r--r--gc.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/gc.c b/gc.c
index 9bde487a8c..f4ee76d365 100644
--- a/gc.c
+++ b/gc.c
@@ -2272,22 +2272,25 @@ void rb_vm_mark(void *ptr);
(start = STACK_END, end = STACK_START) : (start = STACK_START, end = STACK_END+appendix))
#endif
+#define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
+
static void
mark_current_machine_context(rb_objspace_t *objspace, rb_thread_t *th)
{
- rb_jmp_buf save_regs_gc_mark;
+ union {
+ rb_jmp_buf j;
+ VALUE v[sizeof(rb_jmp_buf) / sizeof(VALUE)];
+ } save_regs_gc_mark;
VALUE *stack_start, *stack_end;
FLUSH_REGISTER_WINDOWS;
/* This assumes that all registers are saved into the jmp_buf (and stack) */
- rb_setjmp(save_regs_gc_mark);
+ rb_setjmp(save_regs_gc_mark.j);
SET_STACK_END;
GET_STACK_BOUNDS(stack_start, stack_end, 1);
- mark_locations_array(objspace,
- (VALUE*)save_regs_gc_mark,
- sizeof(save_regs_gc_mark) / sizeof(VALUE));
+ mark_locations_array(objspace, save_regs_gc_mark.v, numberof(save_regs_gc_mark.v));
rb_gc_mark_locations(stack_start, stack_end);
#ifdef __ia64