From 798b9d097b7ca83878983792378a1b9a39800f9d Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 2 Nov 2023 08:09:29 +0300 Subject: [PATCH] Fixed GH-10008: Narrowing occurred during type inference of ZEND_ADD_ARRAY_ELEMENT --- Zend/Optimizer/zend_inference.c | 3 ++- ext/opcache/tests/opt/gh10008.phpt | 26 ++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 ext/opcache/tests/opt/gh10008.phpt diff --git a/Zend/Optimizer/zend_inference.c b/Zend/Optimizer/zend_inference.c index 49dd44ff890..084a7abf9f7 100644 --- a/Zend/Optimizer/zend_inference.c +++ b/Zend/Optimizer/zend_inference.c @@ -2530,7 +2530,8 @@ static zend_always_inline int _zend_update_type_info( * unreachable code. Propagate the empty result early, so that that the following * code may assume that operands have at least one type. */ if (!(t1 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_CLASS)) - || !(t2 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_CLASS))) { + || !(t2 & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_CLASS)) + || (ssa_op->result_use >= 0 && !(RES_USE_INFO() & (MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_CLASS)))) { tmp = 0; if (ssa_op->result_def >= 0 && !(ssa_var_info[ssa_op->result_def].type & MAY_BE_REF)) { UPDATE_SSA_TYPE(tmp, ssa_op->result_def); diff --git a/ext/opcache/tests/opt/gh10008.phpt b/ext/opcache/tests/opt/gh10008.phpt new file mode 100644 index 00000000000..02f6feff9b0 --- /dev/null +++ b/ext/opcache/tests/opt/gh10008.phpt @@ -0,0 +1,26 @@ +--TEST-- +GH-10008: Narrowing occurred during type inference of ZEND_ADD_ARRAY_ELEMENT +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +--EXTENSIONS-- +opcache +--FILE-- + $bool_or_int, $string_key => 123]; + } + + $bool_or_int = 0; + } +} +?> +DONE +--EXPECT-- +DONE