summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2017-12-04 17:22:06 +0300
committerDmitry Stogov <dmitry@zend.com>2017-12-04 17:22:06 +0300
commit5934bff91337b876195e9290b0811240052be7a3 (patch)
treea79e99fae28fedf08ca7f47aa3a6433a10017c48
parent1da28c55c418afe86f6204ecd0d8d28ce235220f (diff)
downloadphp-git-5934bff91337b876195e9290b0811240052be7a3.tar.gz
Fixed bug #75608 ("Narrowing occurred during type inference" error)
-rw-r--r--NEWS2
-rw-r--r--ext/opcache/Optimizer/zend_inference.c4
-rw-r--r--ext/opcache/tests/bug75608.phpt33
3 files changed, 37 insertions, 2 deletions
diff --git a/NEWS b/NEWS
index 76c030e2b8..fa23892481 100644
--- a/NEWS
+++ b/NEWS
@@ -19,6 +19,8 @@ PHP NEWS
requests). (Remi)
- Opcache:
+ . Fixed bug #75608 ("Narrowing occurred during type inference" error).
+ (Laruence, Dmitry)
. Fixed bug #75570 ("Narrowing occurred during type inference" error).
(Dmitry)
diff --git a/ext/opcache/Optimizer/zend_inference.c b/ext/opcache/Optimizer/zend_inference.c
index ef821350ee..96588f5dc0 100644
--- a/ext/opcache/Optimizer/zend_inference.c
+++ b/ext/opcache/Optimizer/zend_inference.c
@@ -2928,7 +2928,7 @@ static int zend_update_type_info(const zend_op_array *op_array,
break;
case ZEND_FE_FETCH_R:
case ZEND_FE_FETCH_RW:
- tmp = (t2 & MAY_BE_REF);
+ tmp = t2;
if (t1 & MAY_BE_OBJECT) {
if (opline->opcode == ZEND_FE_FETCH_RW) {
tmp |= MAY_BE_REF | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
@@ -2953,7 +2953,7 @@ static int zend_update_type_info(const zend_op_array *op_array,
}
UPDATE_SSA_TYPE(tmp, ssa_ops[i].op2_def);
if (ssa_ops[i].result_def >= 0) {
- tmp = 0;
+ tmp = (ssa_ops[i].result_use >= 0) ? RES_USE_INFO() : 0;
if (t1 & MAY_BE_OBJECT) {
tmp |= MAY_BE_RC1 | MAY_BE_RCN | MAY_BE_ANY | MAY_BE_ARRAY_KEY_ANY | MAY_BE_ARRAY_OF_ANY | MAY_BE_ARRAY_OF_REF;
}
diff --git a/ext/opcache/tests/bug75608.phpt b/ext/opcache/tests/bug75608.phpt
new file mode 100644
index 0000000000..875e102ac8
--- /dev/null
+++ b/ext/opcache/tests/bug75608.phpt
@@ -0,0 +1,33 @@
+--TEST--
+Bug #75608 ("Narrowing occurred during type inference" error)
+--FILE--
+<?php
+class ReactionRatingService
+{
+ public function calculateBoostPoints()
+ {
+ while ($reaction = $reactions) {
+ $reactionRatings = $this->validFunction();
+
+ $totalWeight = 0;
+ $runningScore = 0;
+ $queue = [];
+ foreach ($reactionRatings as $ratingData) {
+ if ($runningScore != $reaction['Score']) {
+ if ( ! $ratingData['BoostEarned']) {
+ $queue[] = $ratingData['UserID'];
+ }
+ } else {
+ foreach ($queue as $userId) {
+ $userBoostPointsRecalculate[$userId][] = $reaction['ID'];
+ }
+ }
+ $totalWeight += $ratingData['Weight'];
+ }
+ }
+ }
+}
+?>
+OK
+--EXPECT--
+OK