summaryrefslogtreecommitdiff
path: root/internal/bits.h
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/bits.h
parent945e79c99633ab1beb061cea1217c83399777d4e (diff)
Check that __builtin_mul_overflow can handle long long
Fixes [Bug #17646] Patch from xtkoba (Tee KOBAYASHI)
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/8288
Diffstat (limited to 'internal/bits.h')
-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