[前][次][番号順一覧][スレッド一覧]

ruby-changes:45143

From: usa <ko1@a...>
Date: Tue, 27 Dec 2016 19:50:01 +0900 (JST)
Subject: [ruby-changes:45143] usa:r57216 (ruby_2_2): merge revision(s) 57020, 57021: [Backport #13014]

usa	2016-12-27 19:49:55 +0900 (Tue, 27 Dec 2016)

  New Revision: 57216

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=57216

  Log:
    merge revision(s) 57020,57021: [Backport #13014]
    
    Add clang volatile fixes from FreeBSD and NetBSD.
    
    Use volatile instead of optnone to avoid optimization which causes
    segmentation faults.
    Patch by Dimitry Andric.  [ruby-core:78531] [Bug #13014]

  Modified directories:
    branches/ruby_2_2/
  Modified files:
    branches/ruby_2_2/ChangeLog
    branches/ruby_2_2/cont.c
    branches/ruby_2_2/eval.c
    branches/ruby_2_2/eval_error.c
    branches/ruby_2_2/thread.c
    branches/ruby_2_2/version.h
    branches/ruby_2_2/vm_eval.c
    branches/ruby_2_2/vm_trace.c
Index: ruby_2_2/vm_eval.c
===================================================================
--- ruby_2_2/vm_eval.c	(revision 57215)
+++ ruby_2_2/vm_eval.c	(revision 57216)
@@ -1239,7 +1239,7 @@ eval_string_with_cref(VALUE self, VALUE https://github.com/ruby/ruby/blob/trunk/ruby_2_2/vm_eval.c#L1239
     int state;
     VALUE result = Qundef;
     VALUE envval;
-    rb_thread_t *th = GET_THREAD();
+    rb_thread_t *volatile th = GET_THREAD();
     rb_env_t *env = NULL;
     rb_block_t block, *base_block;
     volatile int parse_in_eval;
@@ -1984,7 +1984,7 @@ rb_catch_protect(VALUE t, rb_block_call_ https://github.com/ruby/ruby/blob/trunk/ruby_2_2/vm_eval.c#L1984
     int state;
     volatile VALUE val = Qnil;		/* OK */
     rb_thread_t *th = GET_THREAD();
-    rb_control_frame_t *saved_cfp = th->cfp;
+    rb_control_frame_t *volatile saved_cfp = th->cfp;
     volatile VALUE tag = t;
 
     TH_PUSH_TAG(th);
Index: ruby_2_2/eval.c
===================================================================
--- ruby_2_2/eval.c	(revision 57215)
+++ ruby_2_2/eval.c	(revision 57216)
@@ -814,7 +814,7 @@ rb_rescue2(VALUE (* b_proc) (ANYARGS), V https://github.com/ruby/ruby/blob/trunk/ruby_2_2/eval.c#L814
 {
     int state;
     rb_thread_t *th = GET_THREAD();
-    rb_control_frame_t *cfp = th->cfp;
+    rb_control_frame_t *volatile cfp = th->cfp;
     volatile VALUE result = Qfalse;
     volatile VALUE e_info = th->errinfo;
     va_list args;
@@ -880,7 +880,7 @@ rb_protect(VALUE (* proc) (VALUE), VALUE https://github.com/ruby/ruby/blob/trunk/ruby_2_2/eval.c#L880
     volatile VALUE result = Qnil;
     volatile int status;
     rb_thread_t *th = GET_THREAD();
-    rb_control_frame_t *cfp = th->cfp;
+    rb_control_frame_t *volatile cfp = th->cfp;
     struct rb_vm_protect_tag protect_tag;
     rb_jmpbuf_t org_jmpbuf;
 
Index: ruby_2_2/version.h
===================================================================
--- ruby_2_2/version.h	(revision 57215)
+++ ruby_2_2/version.h	(revision 57216)
@@ -1,6 +1,6 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_2/version.h#L1
 #define RUBY_VERSION "2.2.7"
 #define RUBY_RELEASE_DATE "2016-12-27"
-#define RUBY_PATCHLEVEL 406
+#define RUBY_PATCHLEVEL 407
 
 #define RUBY_RELEASE_YEAR 2016
 #define RUBY_RELEASE_MONTH 12
Index: ruby_2_2/vm_trace.c
===================================================================
--- ruby_2_2/vm_trace.c	(revision 57215)
+++ ruby_2_2/vm_trace.c	(revision 57216)
@@ -390,7 +390,7 @@ rb_suppress_tracing(VALUE (*func)(VALUE) https://github.com/ruby/ruby/blob/trunk/ruby_2_2/vm_trace.c#L390
     volatile int raised;
     volatile int outer_state;
     VALUE result = Qnil;
-    rb_thread_t *th = GET_THREAD();
+    rb_thread_t *volatile th = GET_THREAD();
     int state;
     const int tracing = th->trace_arg ? 1 : 0;
     rb_trace_arg_t dummy_trace_arg;
Index: ruby_2_2/cont.c
===================================================================
--- ruby_2_2/cont.c	(revision 57215)
+++ ruby_2_2/cont.c	(revision 57216)
@@ -167,7 +167,7 @@ static VALUE rb_eFiberError; https://github.com/ruby/ruby/blob/trunk/ruby_2_2/cont.c#L167
     if (!(ptr)) rb_raise(rb_eFiberError, "uninitialized fiber"); \
 } while (0)
 
-NOINLINE(static VALUE cont_capture(volatile int *stat));
+NOINLINE(static VALUE cont_capture(volatile int *volatile stat));
 
 #define THREAD_MUST_BE_RUNNING(th) do { \
 	if (!(th)->tag) rb_raise(rb_eThreadError, "not running thread");	\
@@ -478,13 +478,9 @@ cont_new(VALUE klass) https://github.com/ruby/ruby/blob/trunk/ruby_2_2/cont.c#L478
 }
 
 static VALUE
-cont_capture(volatile int *stat)
-#if defined(__clang__) && \
-    __clang_major__ == 3 && __clang_minor__ == 8 && __clang_patch__ == 0
-__attribute__ ((optnone))
-#endif
+cont_capture(volatile int *volatile stat)
 {
-    rb_context_t *cont;
+    rb_context_t *volatile cont;
     rb_thread_t *th = GET_THREAD();
     volatile VALUE contval;
 
Index: ruby_2_2/eval_error.c
===================================================================
--- ruby_2_2/eval_error.c	(revision 57215)
+++ ruby_2_2/eval_error.c	(revision 57216)
@@ -65,7 +65,7 @@ error_print(void) https://github.com/ruby/ruby/blob/trunk/ruby_2_2/eval_error.c#L65
     volatile VALUE errat = Qundef;
     rb_thread_t *th = GET_THREAD();
     VALUE errinfo = th->errinfo;
-    int raised_flag = th->raised_flag;
+    volatile int raised_flag = th->raised_flag;
     volatile VALUE eclass = Qundef, e = Qundef;
     const char *volatile einfo;
     volatile long elen;
Index: ruby_2_2/ChangeLog
===================================================================
--- ruby_2_2/ChangeLog	(revision 57215)
+++ ruby_2_2/ChangeLog	(revision 57216)
@@ -1,3 +1,12 @@ https://github.com/ruby/ruby/blob/trunk/ruby_2_2/ChangeLog#L1
+Tue Dec 27 19:49:01 2016  Shugo Maeda  <shugo@r...>
+
+	* cont.c, eval.c, eval_error.c, thread.c, vm_eval.c, vm_trace.c: add
+	  clang volatile fixes from FreeBSD and NetBSD.
+
+	  Use volatile instead of optnone to avoid optimization which causes
+	  segmentation faults.
+	  Patch by Dimitry Andric. [Bug #13014]
+
 Tue Dec 27 19:40:09 2016  Nobuyoshi Nakada  <nobu@r...>
 
 	* README.EXT{.ja,}: [DOC] optional keyword arguments are defaulted to
Index: ruby_2_2/thread.c
===================================================================
--- ruby_2_2/thread.c	(revision 57215)
+++ ruby_2_2/thread.c	(revision 57216)
@@ -462,8 +462,8 @@ rb_threadptr_unlock_all_locking_mutexes( https://github.com/ruby/ruby/blob/trunk/ruby_2_2/thread.c#L462
 void
 rb_thread_terminate_all(void)
 {
-    rb_thread_t *th = GET_THREAD(); /* main thread */
-    rb_vm_t *vm = th->vm;
+    rb_thread_t *volatile th = GET_THREAD(); /* main thread */
+    rb_vm_t *volatile vm = th->vm;
 
     if (vm->main_thread != th) {
 	rb_bug("rb_thread_terminate_all: called by child thread (%p, %p)",

Property changes on: ruby_2_2
___________________________________________________________________
Modified: svn:mergeinfo
   Merged /trunk:r57020-57021


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]