aboutsummaryrefslogtreecommitdiffstats
path: root/internal
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2023-08-24 13:44:03 -0700
committerJeremy Evans <code@jeremyevans.net>2023-08-24 20:47:23 -0700
commitb635388a900206b673fc23b5442345236b84cd75 (patch)
tree5f18e621d30b506392c0bea9eae79eea1513ecbc /internal
parent945e79c99633ab1beb061cea1217c83399777d4e (diff)
downloadruby-b635388a900206b673fc23b5442345236b84cd75.tar.gz
Check that __builtin_mul_overflow can handle long long
Fixes [Bug #17646] Patch from xtkoba (Tee KOBAYASHI)
Diffstat (limited to 'internal')
-rw-r--r--internal/bits.h8
1 files changed, 6 insertions, 2 deletions
diff --git a/internal/bits.h b/internal/bits.h
index 6248e4cfa9..538e6c11ae 100644
--- a/internal/bits.h
+++ b/internal/bits.h
@@ -118,12 +118,16 @@
MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, FIXNUM_MIN, FIXNUM_MAX)
#endif
-#ifdef MUL_OVERFLOW_P
+#if defined(MUL_OVERFLOW_P) && defined(USE___BUILTIN_MUL_OVERFLOW_LONG_LONG)
# define MUL_OVERFLOW_LONG_LONG_P(a, b) MUL_OVERFLOW_P(a, b)
+#else
+# define MUL_OVERFLOW_LONG_LONG_P(a, b) MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, LLONG_MIN, LLONG_MAX)
+#endif
+
+#ifdef MUL_OVERFLOW_P
# define MUL_OVERFLOW_LONG_P(a, b) MUL_OVERFLOW_P(a, b)
# define MUL_OVERFLOW_INT_P(a, b) MUL_OVERFLOW_P(a, b)
#else
-# define MUL_OVERFLOW_LONG_LONG_P(a, b) MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, LLONG_MIN, LLONG_MAX)
# define MUL_OVERFLOW_LONG_P(a, b) MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, LONG_MIN, LONG_MAX)
# define MUL_OVERFLOW_INT_P(a, b) MUL_OVERFLOW_SIGNED_INTEGER_P(a, b, INT_MIN, INT_MAX)
#endif