mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
commit
13467bdcc0
2 changed files with 34 additions and 0 deletions
|
@ -284,6 +284,14 @@ static void place_essa_pis(
|
||||||
default:
|
default:
|
||||||
continue;
|
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 &&
|
if (opline->op1_type == IS_TMP_VAR &&
|
||||||
((opline-1)->opcode == ZEND_IS_EQUAL ||
|
((opline-1)->opcode == ZEND_IS_EQUAL ||
|
||||||
(opline-1)->opcode == ZEND_IS_NOT_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…
Add table
Add a link
Reference in a new issue