aboutsummaryrefslogtreecommitdiffstats
path: root/configure.ac
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 /configure.ac
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 'configure.ac')
-rw-r--r--configure.ac21
1 files changed, 21 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index f71c2c2609..05dd41e79c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2224,6 +2224,27 @@ RUBY_CHECK_BUILTIN_FUNC(__builtin_types_compatible_p, [__builtin_types_compatibl
RUBY_CHECK_BUILTIN_FUNC(__builtin_trap, [__builtin_trap()])
RUBY_CHECK_BUILTIN_FUNC(__builtin_expect, [__builtin_expect(0, 0)])
+AS_IF([test "$rb_cv_builtin___builtin_mul_overflow" != no], [
+ AC_CACHE_CHECK(for __builtin_mul_overflow with long long arguments, rb_cv_use___builtin_mul_overflow_long_long, [
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[
+#pragma clang optimize off
+
+int
+main(void)
+{
+ long long x = 0, y;
+ __builtin_mul_overflow(x, x, &y);
+
+ return 0;
+}
+]])],
+ rb_cv_use___builtin_mul_overflow_long_long=yes,
+ rb_cv_use___builtin_mul_overflow_long_long=no)])
+])
+AS_IF([test "$rb_cv_use___builtin_mul_overflow_long_long" = yes], [
+ AC_DEFINE(USE___BUILTIN_MUL_OVERFLOW_LONG_LONG, 1)
+])
+
AS_IF([test "$ac_cv_func_qsort_r" != no], [
AC_CACHE_CHECK(whether qsort_r is GNU version, rb_cv_gnu_qsort_r,
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[