TypePHP 编译器
https://swoole.com/aot/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.1 KiB
88 lines
2.1 KiB
--TEST--
|
|
Constant integer arithmetic overflow promotes to float like PHP
|
|
--FILE--
|
|
<?php
|
|
declare(strict_types=1);
|
|
|
|
function overflowInferred()
|
|
{
|
|
return PHP_INT_MAX + 1;
|
|
}
|
|
|
|
function unaryOverflowInferred()
|
|
{
|
|
return -PHP_INT_MIN;
|
|
}
|
|
|
|
function fractionalDivisionInferred()
|
|
{
|
|
return 1 / 2;
|
|
}
|
|
|
|
function main(): void
|
|
{
|
|
var_dump(PHP_INT_MAX + 1);
|
|
var_dump(PHP_INT_MIN - 1);
|
|
var_dump(PHP_INT_MAX * 2);
|
|
var_dump(PHP_INT_MIN / -1);
|
|
var_dump(1 + 2);
|
|
var_dump(PHP_INT_MAX + 0);
|
|
var_dump(-PHP_INT_MIN);
|
|
$overflow = PHP_INT_MAX + 1;
|
|
var_dump($overflow, is_int($overflow), is_float($overflow));
|
|
var_dump(overflowInferred(), is_float(overflowInferred()));
|
|
var_dump(unaryOverflowInferred(), is_float(unaryOverflowInferred()));
|
|
var_dump(fractionalDivisionInferred(), is_float(fractionalDivisionInferred()));
|
|
var_dump((PHP_INT_MAX + 1) === (float) PHP_INT_MAX);
|
|
var_dump(PHP_INT_MIN % -1);
|
|
var_dump((1 + 1) / 4);
|
|
var_dump(PHP_INT_MAX + (1 - 0));
|
|
var_dump(PHP_INT_MIN - (1 + 0));
|
|
var_dump(PHP_INT_MAX * (1 + 1));
|
|
var_dump(PHP_INT_MIN / (0 - 1));
|
|
var_dump(PHP_INT_MIN % (0 - 1));
|
|
var_dump(-(PHP_INT_MIN + 0));
|
|
var_dump(PHP_INT_MAX - (1 + 0));
|
|
var_dump((4 / 2) + PHP_INT_MAX);
|
|
try {
|
|
var_dump(8 / (1 - 1));
|
|
} catch (DivisionByZeroError $error) {
|
|
echo "nested division by zero\n";
|
|
}
|
|
try {
|
|
var_dump(8 % (1 - 1));
|
|
} catch (DivisionByZeroError $error) {
|
|
echo "nested modulo by zero\n";
|
|
}
|
|
}
|
|
?>
|
|
--EXPECTF--
|
|
float(9.223372036854776E+18)
|
|
float(-9.223372036854776E+18)
|
|
float(1.8446744073709552E+19)
|
|
float(9.223372036854776E+18)
|
|
int(3)
|
|
int(9223372036854775807)
|
|
float(9.223372036854776E+18)
|
|
float(9.223372036854776E+18)
|
|
bool(false)
|
|
bool(true)
|
|
float(9.223372036854776E+18)
|
|
bool(true)
|
|
float(9.223372036854776E+18)
|
|
bool(true)
|
|
float(0.5)
|
|
bool(true)
|
|
bool(true)
|
|
int(0)
|
|
float(0.5)
|
|
float(9.223372036854776E+18)
|
|
float(-9.223372036854776E+18)
|
|
float(1.8446744073709552E+19)
|
|
float(9.223372036854776E+18)
|
|
int(0)
|
|
float(9.223372036854776E+18)
|
|
int(9223372036854775806)
|
|
float(9.223372036854776E+18)
|
|
nested division by zero
|
|
nested modulo by zero
|
|
|