mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Provide overflow safe integer math inline functions.
It's not easy to get signed integer overflow checks correct and fast. Therefore abstract the necessary infrastructure into a common header providing addition, subtraction and multiplication for 16, 32, 64 bit signed integers. The new macros aren't yet used, but a followup commit will convert several open coded overflow checks. Author: Andres Freund, with some code stolen from Greg Stark Reviewed-By: Robert Haas Discussion: https://postgr.es/m/20171024103954.ztmatprlglz3rwke@alap3.anarazel.de
This commit is contained in:
@ -299,6 +299,28 @@ fi])# PGAC_C_BUILTIN_CONSTANT_P
|
||||
|
||||
|
||||
|
||||
# PGAC_C_BUILTIN_OP_OVERFLOW
|
||||
# -------------------------
|
||||
# Check if the C compiler understands __builtin_$op_overflow(),
|
||||
# and define HAVE__BUILTIN_OP_OVERFLOW if so.
|
||||
#
|
||||
# Check for the most complicated case, 64 bit multiplication, as a
|
||||
# proxy for all of the operations.
|
||||
AC_DEFUN([PGAC_C_BUILTIN_OP_OVERFLOW],
|
||||
[AC_CACHE_CHECK(for __builtin_mul_overflow, pgac_cv__builtin_op_overflow,
|
||||
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
|
||||
[PG_INT64_TYPE result;
|
||||
__builtin_mul_overflow((PG_INT64_TYPE) 1, (PG_INT64_TYPE) 2, &result);]
|
||||
)],
|
||||
[pgac_cv__builtin_op_overflow=yes],
|
||||
[pgac_cv__builtin_op_overflow=no])])
|
||||
if test x"$pgac_cv__builtin_op_overflow" = xyes ; then
|
||||
AC_DEFINE(HAVE__BUILTIN_OP_OVERFLOW, 1,
|
||||
[Define to 1 if your compiler understands __builtin_$op_overflow.])
|
||||
fi])# PGAC_C_BUILTIN_OP_OVERFLOW
|
||||
|
||||
|
||||
|
||||
# PGAC_C_BUILTIN_UNREACHABLE
|
||||
# --------------------------
|
||||
# Check if the C compiler understands __builtin_unreachable(),
|
||||
|
Reference in New Issue
Block a user