diff --git a/Zend/zend_long.h b/Zend/zend_long.h index 3796f1c5ababb..32dd10e86ca01 100644 --- a/Zend/zend_long.h +++ b/Zend/zend_long.h @@ -34,6 +34,7 @@ typedef uint64_t zend_ulong; typedef int64_t zend_off_t; # define ZEND_LONG_MAX INT64_MAX # define ZEND_LONG_MIN INT64_MIN +# define ZEND_LONG_SAFE_MAX (2ULL << 52U)-1U # define ZEND_ULONG_MAX UINT64_MAX # define Z_L(i) INT64_C(i) # define Z_UL(i) UINT64_C(i) @@ -44,6 +45,7 @@ typedef uint32_t zend_ulong; typedef int32_t zend_off_t; # define ZEND_LONG_MAX INT32_MAX # define ZEND_LONG_MIN INT32_MIN +# define ZEND_LONG_SAFE_MAX INT32_MAX # define ZEND_ULONG_MAX UINT32_MAX # define Z_L(i) INT32_C(i) # define Z_UL(i) UINT32_C(i) diff --git a/main/main.stub.php b/main/main.stub.php index 3359d4a1cd0bf..755d2c44c6766 100644 --- a/main/main.stub.php +++ b/main/main.stub.php @@ -163,6 +163,11 @@ * @cvalue SIZEOF_ZEND_LONG */ const PHP_INT_SIZE = UNKNOWN; +/** + * @var int + * @cvalue ZEND_LONG_SAFE_MAX + */ +const PHP_INT_MAX_SAFE = UNKNOWN; /** * @var int * @cvalue FD_SETSIZE diff --git a/main/main_arginfo.h b/main/main_arginfo.h index 922af3aff0629..4b6caa88b132e 100644 --- a/main/main_arginfo.h +++ b/main/main_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: cb5c9a3e48b18a773264378099267550ca9e4fc1 */ + * Stub hash: 0cf6005e93a1fc95b221f8450a0daef6caae7e63 */ static void register_main_symbols(int module_number) { @@ -36,6 +36,7 @@ static void register_main_symbols(int module_number) REGISTER_LONG_CONSTANT("PHP_INT_MAX", ZEND_LONG_MAX, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("PHP_INT_MIN", ZEND_LONG_MIN, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("PHP_INT_SIZE", SIZEOF_ZEND_LONG, CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("PHP_INT_MAX_SAFE", ZEND_LONG_SAFE_MAX, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("PHP_FD_SETSIZE", FD_SETSIZE, CONST_PERSISTENT); REGISTER_LONG_CONSTANT("PHP_FLOAT_DIG", DBL_DIG, CONST_PERSISTENT); REGISTER_DOUBLE_CONSTANT("PHP_FLOAT_EPSILON", DBL_EPSILON, CONST_PERSISTENT); diff --git a/tests/lang/constants/PHP_INT_32bit.phpt b/tests/lang/constants/PHP_INT_32bit.phpt index 624ceb43431ca..1e50afdf150d2 100644 --- a/tests/lang/constants/PHP_INT_32bit.phpt +++ b/tests/lang/constants/PHP_INT_32bit.phpt @@ -1,5 +1,5 @@ --TEST-- -Test PHP_INT_MIN, PHP_INT_MAX and PHP_INT_SIZE (32-bit) +Test PHP_INT_MIN, PHP_INT_MAX, PHP_INT_MAX_SAFE and PHP_INT_SIZE (32-bit) --SKIPIF-- @@ -8,10 +8,14 @@ Test PHP_INT_MIN, PHP_INT_MAX and PHP_INT_SIZE (32-bit) var_dump(PHP_INT_MIN); var_dump(PHP_INT_MAX); +var_dump(PHP_INT_MAX_SAFE); +var_dump(PHP_INT_MAX_SAFE === PHP_INT_MAX); var_dump(PHP_INT_SIZE); ?> --EXPECT-- int(-2147483648) int(2147483647) +int(2147483647) +bool(true) int(4) diff --git a/tests/lang/constants/PHP_INT_64bit.phpt b/tests/lang/constants/PHP_INT_64bit.phpt index 7756e59a3f0bf..673b47f6f0b84 100644 --- a/tests/lang/constants/PHP_INT_64bit.phpt +++ b/tests/lang/constants/PHP_INT_64bit.phpt @@ -1,5 +1,5 @@ --TEST-- -Test PHP_INT_MIN, PHP_INT_MAX and PHP_INT_SIZE (64-bit) +Test PHP_INT_MIN, PHP_INT_MAX, PHP_INT_MAX_SAFE and PHP_INT_SIZE (64-bit) --SKIPIF-- @@ -8,10 +8,14 @@ Test PHP_INT_MIN, PHP_INT_MAX and PHP_INT_SIZE (64-bit) var_dump(PHP_INT_MIN); var_dump(PHP_INT_MAX); +var_dump(PHP_INT_MAX_SAFE); +var_dump(PHP_INT_MAX_SAFE === (2 << 52)-1); var_dump(PHP_INT_SIZE); ?> --EXPECT-- int(-9223372036854775808) int(9223372036854775807) +int(9007199254740991) +bool(true) int(8)