Merge branch 'PHP-8.0'

* PHP-8.0:
  Fixed bug #81015
This commit is contained in:
Nikita Popov 2021-05-06 10:47:22 +02:00
commit 13467bdcc0
2 changed files with 34 additions and 0 deletions

View File

@ -284,6 +284,14 @@ static void place_essa_pis(
default:
continue;
}
/* The following patterns all inspect the opline directly before the JMPZ opcode.
* Make sure that it is part of the same block, otherwise it might not be a dominating
* assignment. */
if (blocks[j].len == 1) {
continue;
}
if (opline->op1_type == IS_TMP_VAR &&
((opline-1)->opcode == ZEND_IS_EQUAL ||
(opline-1)->opcode == ZEND_IS_NOT_EQUAL ||

View File

@ -0,0 +1,26 @@
--TEST--
Bug #81015: Opcache optimization assumes wrong part of ternary operator in if-condition
--FILE--
<?php
function ternary(bool $enabled, ?string $value): void
{
// the "true" part is not as trivial in the real case
if ($enabled ? true : $value === null) {
echo ($value ?? 'NULL') . "\n";
} else {
echo "INVALID\n";
}
}
ternary(true, 'value');
ternary(true, null);
ternary(false, 'value');
ternary(false, null);
?>
--EXPECT--
value
NULL
INVALID
NULL