diff options
author | Jeremy Evans <code@jeremyevans.net> | 2023-08-24 13:44:03 -0700 |
---|---|---|
committer | Jeremy Evans <code@jeremyevans.net> | 2023-08-24 20:47:23 -0700 |
commit | b635388a900206b673fc23b5442345236b84cd75 (patch) | |
tree | 5f18e621d30b506392c0bea9eae79eea1513ecbc /configure.ac | |
parent | 945e79c99633ab1beb061cea1217c83399777d4e (diff) | |
download | ruby-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.ac | 21 |
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([[ |