]> granicus.if.org Git - php/commitdiff
Fixed bug #75608 ("Narrowing occurred during type inference" error)
authorDmitry Stogov <dmitry@zend.com>
Mon, 4 Dec 2017 14:22:06 +0000 (17:22 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 4 Dec 2017 14:22:06 +0000 (17:22 +0300)
NEWS
ext/opcache/Optimizer/zend_inference.c
ext/opcache/tests/bug75608.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 76c030e2b870257be007584463dab5afb8f78514..fa238924814f93d92a82a6bc666d0a856f9a9b8b 100644 (file)
--- 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)
 
index ef821350ee81f0ef6f6e535564bceefd30b781b1..96588f5dc0767bca575ca5f9c1195e5a5571e618 100644 (file)
@@ -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 (file)
index 0000000..875e102
--- /dev/null
@@ -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