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

ruby-changes:10069

From: nobu <ko1@a...>
Date: Sat, 17 Jan 2009 11:13:34 +0900 (JST)
Subject: [ruby-changes:10069] Ruby:r21612 (trunk): * cont.c (cont_restore_0): padding size doesn't need to be large

nobu	2009-01-17 11:11:38 +0900 (Sat, 17 Jan 2009)

  New Revision: 21612

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21612

  Log:
    * cont.c (cont_restore_0): padding size doesn't need to be large
      if alloca is used.  suppress warnings.

  Modified files:
    trunk/ChangeLog
    trunk/cont.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21611)
+++ ChangeLog	(revision 21612)
@@ -1,3 +1,8 @@
+Sat Jan 17 11:12:37 2009  Nobuyoshi Nakada  <nobu@r...>
+
+	* cont.c (cont_restore_0): padding size doesn't need to be large
+	  if alloca is used.  suppress warnings.
+
 Sat Jan 17 11:12:21 2009  Nobuyoshi Nakada  <nobu@r...>
 
 	* vm_dump.c (vm_stack_dump_each): initialized at declarations.
Index: cont.c
===================================================================
--- cont.c	(revision 21611)
+++ cont.c	(revision 21612)
@@ -403,7 +403,11 @@
 cont_restore_0(rb_context_t *cont, VALUE *addr_in_prev_frame)
 {
     if (cont->machine_stack_src) {
+#ifdef HAVE_ALLOCA
+#define STACK_PAD_SIZE 1
+#else
 #define STACK_PAD_SIZE 1024
+#endif
 	VALUE space[STACK_PAD_SIZE];
 
 #if !STACK_GROW_DIRECTION
@@ -411,9 +415,11 @@
 	    /* Stack grows downward */
 #endif
 #if STACK_GROW_DIRECTION <= 0
-	    if (&space[0] > cont->machine_stack_src) {
+	    volatile VALUE *const end = cont->machine_stack_src;
+	    if (&space[0] > end) {
 # ifdef HAVE_ALLOCA
-		ALLOCA_N(VALUE, &space[0] - cont->machine_stack_src);
+		volatile VALUE *sp = ALLOCA_N(VALUE, &space[0] - end);
+		(void)sp;
 # else
 		cont_restore_0(cont, &space[0]);
 # endif
@@ -425,9 +431,11 @@
 	    /* Stack grows upward */
 #endif
 #if STACK_GROW_DIRECTION >= 0
-	    if (&space[STACK_PAD_SIZE] < cont->machine_stack_src + cont->machine_stack_size) {
+	    volatile VALUE *const end = cont->machine_stack_src + cont->machine_stack_size;
+	    if (&space[STACK_PAD_SIZE] < end) {
 # ifdef HAVE_ALLOCA
-		ALLOCA_N(VALUE, cont->machine_stack_src + cont->machine_stack_size - &space[STACK_PAD_SIZE]);
+		volatile VALUE *sp = ALLOCA_N(VALUE, end - &space[STACK_PAD_SIZE]);
+		(void)sp;
 # else
 		cont_restore_0(cont, &space[STACK_PAD_SIZE-1]);
 # endif

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

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