mirror of
https://github.com/php/php-src.git
synced 2024-11-27 03:44:07 +08:00
commit
13467bdcc0
@ -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 ||
|
||||
|
26
ext/opcache/tests/bug81015.phpt
Normal file
26
ext/opcache/tests/bug81015.phpt
Normal 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
|
Loading…
Reference in New Issue
Block a user