summaryrefslogtreecommitdiff
path: root/tool/m4/ruby_check_builtin_overflow.m4
blob: 8568d2c6d927d794f9ded4f088c930e8bd00d463 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
dnl -*- Autoconf -*-
AC_DEFUN([RUBY_CHECK_BUILTIN_OVERFLOW], [dnl
{ # $0($1)
  RUBY_CHECK_BUILTIN_FUNC(__builtin_[$1]_overflow, [int x;__builtin_[$1]_overflow(0,0,&x)])
  RUBY_CHECK_BUILTIN_FUNC(__builtin_[$1]_overflow_p, [__builtin_[$1]_overflow_p(0,0,(int)0)])

  AS_IF([test "$rb_cv_builtin___builtin_[$1]_overflow" != no], [
    AC_CACHE_CHECK(for __builtin_[$1]_overflow with long long arguments, rb_cv_use___builtin_[$1]_overflow_long_long, [
      AC_LINK_IFELSE([AC_LANG_SOURCE([[
@%:@pragma clang optimize off

int
main(void)
{
    long long x = 0, y;
    __builtin_$1_overflow(x, x, &y);

    return 0;
}
]])],
	rb_cv_use___builtin_[$1]_overflow_long_long=yes,
	rb_cv_use___builtin_[$1]_overflow_long_long=no)])
  ])
  AS_IF([test "$rb_cv_use___builtin_[$1]_overflow_long_long" = yes], [
    AC_DEFINE(USE___BUILTIN_[]AS_TR_CPP($1)_OVERFLOW_LONG_LONG, 1)
  ])
}
])dnl