On Nov 28, 2007, at 14:46 , Ryan Davis wrote:

> The problem is that the void_expr macro is used in void_stmts and  
> modifies the tree, but only if -v is on:
>
> #define void_expr(node) void_expr0((node) = remove_begin(node))
>
> static void
> void_stmts(node)
>    NODE *node;
> {
>    if (!RTEST(ruby_verbose)) return;
>    if (!node) return;
>    if (nd_type(node) != NODE_BLOCK) return;
>
>    for (;;) {
>        if (!node->nd_next) return;
>        void_expr(node->nd_head);            // <--- modifies tree if  
> -v !!!
>        node = node->nd_next;
>    }
> }

untested, but this should be safe(r):

% svn diff parse.y
Index: parse.y
===================================================================
--- parse.y	(revision 14044)
+++ parse.y	(working copy)
@@ -5206,7 +5206,7 @@

      for (;;) {
  	if (!node->nd_next) return;
-	void_expr(node->nd_head);
+	void_expr0(remove_begin(node->nd_head));
  	node = node->nd_next;
      }
  }