From b635388a900206b673fc23b5442345236b84cd75 Mon Sep 17 00:00:00 2001 From: Jeremy Evans Date: Thu, 24 Aug 2023 13:44:03 -0700 Subject: Check that __builtin_mul_overflow can handle long long Fixes [Bug #17646] Patch from xtkoba (Tee KOBAYASHI) --- configure.ac | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'configure.ac') 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([[ -- cgit v1.2.3