summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--gc.c8
-rw-r--r--include/ruby/ruby.h5
3 files changed, 16 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 5611194e9f..04979dea54 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Fri May 17 17:34:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * gc.c (rb_gc_guarded_ptr): unoptimize on other compilers than gcc and
+ msvc.
+
Fri May 17 11:06:48 2013 Nobuyoshi Nakada <nobu@ruby-lang.org>
* eval_intern.h (TH_PUSH_TAG): ensure jmpbuf to be accessible before
diff --git a/gc.c b/gc.c
index 85a18db703..e4b675e082 100644
--- a/gc.c
+++ b/gc.c
@@ -67,6 +67,14 @@
#define rb_setjmp(env) RUBY_SETJMP(env)
#define rb_jmp_buf rb_jmpbuf_t
+#if defined(HAVE_RB_GC_GUARDED_PTR) && HAVE_RB_GC_GUARDED_PTR
+volatile VALUE *
+rb_gc_guarded_ptr(volatile VALUE *ptr)
+{
+ return ptr;
+}
+#endif
+
#ifndef GC_MALLOC_LIMIT
#define GC_MALLOC_LIMIT 8000000
#endif
diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h
index f7b0cf2efa..6a1bff72f8 100644
--- a/include/ruby/ruby.h
+++ b/include/ruby/ruby.h
@@ -506,10 +506,11 @@ static inline int rb_type(VALUE obj);
#else
#ifdef _MSC_VER
#pragma optimize("", off)
-#endif
static inline volatile VALUE *rb_gc_guarded_ptr(volatile VALUE *ptr) {return ptr;}
-#ifdef _MSC_VER
#pragma optimize("", on)
+#else
+volatile VALUE *rb_gc_guarded_ptr(volatile VALUE *ptr);
+#define HAVE_RB_GC_GUARDED_PTR 1
#endif
#define RB_GC_GUARD_PTR(ptr) rb_gc_guarded_ptr(ptr)
#endif