summaryrefslogtreecommitdiff
path: root/internal.h
diff options
context:
space:
mode:
authornaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-09-25 08:19:10 +0000
committernaruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-09-25 08:19:10 +0000
commitc04b6232f86f98a7e36e649212c62b45ed735415 (patch)
tree77d6dad982cd5cad3505147cab3ef159f836f4c4 /internal.h
parent2c644a50ce69b66d85be2f19a4a090a551a18bde (diff)
Fix overflow detection for LLP64 arch [Bug #13748]
FIXNUMs are expected to fit into a long type, but the test is about a VALUE type. Since long is < than VALUE on LLP64, the overflow is not detected. As a result "2**31" evaluates to "-2147483648" on Windows with gcc-7.1.0. patched by Lars Kanis <lars@greiz-reinsdorf.de> git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60019 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'internal.h')
-rw-r--r--internal.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/internal.h b/internal.h
index 9fac330218..2521e11e6f 100644
--- a/internal.h
+++ b/internal.h
@@ -115,7 +115,7 @@ extern "C" {
/* __builtin_mul_overflow_p can take bitfield */
/* and GCC permits bitfields for integers other than int */
#define MUL_OVERFLOW_FIXNUM_P(a, b) ({ \
- struct { SIGNED_VALUE fixnum : SIZEOF_VALUE * CHAR_BIT - 1; } c; \
+ struct { long fixnum : SIZEOF_LONG * CHAR_BIT - 1; } c; \
__builtin_mul_overflow_p((a), (b), c.fixnum); \
})
#else