From 16acdaefd3531265effeb90ceac0a7923d8285ae Mon Sep 17 00:00:00 2001 From: nagachika Date: Thu, 3 Aug 2017 13:29:12 +0000 Subject: [PATCH] merge revision(s) 58503: [Backport #13523] node.h: sign-extend * node.h (nd_line): should sign-extend. shifting `VALUE` extends with zero bits if `sizeof(VALUE)` equals to `sizeof(int)`. the zero bits are truncated if `sizeof(VALUE)` is bigger enough. [ruby-core:80920] [Bug #13523] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_2_4@59488 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- node.h | 2 +- test/ruby/test_parse.rb | 10 ++++++++++ version.h | 8 ++++---- 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/node.h b/node.h index 8d2ea53c73..8fbe226a87 100644 --- a/node.h +++ b/node.h @@ -277,7 +277,7 @@ typedef struct RNode { #define NODE_LSHIFT (NODE_TYPESHIFT+7) #define NODE_LMASK (((SIGNED_VALUE)1<<(sizeof(VALUE)*CHAR_BIT-NODE_LSHIFT))-1) -#define nd_line(n) (int)(RNODE(n)->flags>>NODE_LSHIFT) +#define nd_line(n) (int)(((SIGNED_VALUE)RNODE(n)->flags)>>NODE_LSHIFT) #define nd_set_line(n,l) \ RNODE(n)->flags=((RNODE(n)->flags&~((VALUE)(-1)<