Commit 4bf483fa881 for php

commit 4bf483fa8814984a7dee7df24ea77f87533e7808
Author: ndossche <7771979+ndossche@users.noreply.github.com>
Date:   Tue Sep 29 00:02:52 2026 +0200

    Fix property hook escape analysis causing misoptimization

    Co-authored-by: Arnaud Le Blanc <365207+arnaud-lb@users.noreply.github.com>

diff --git a/Zend/Optimizer/escape_analysis.c b/Zend/Optimizer/escape_analysis.c
index 0287da7286f..3c2864d14fb 100644
--- a/Zend/Optimizer/escape_analysis.c
+++ b/Zend/Optimizer/escape_analysis.c
@@ -174,6 +174,7 @@ static bool is_allocation_def(zend_op_array *op_array, zend_ssa *ssa, int def, i
 				 && !ce->__get
 				 && !ce->__set
 				 && !ce->__isset
+				 && !ce->num_hooked_props
 				 && !(ce->ce_flags & forbidden_flags)
 				 && (ce->ce_flags & ZEND_ACC_CONSTANTS_UPDATED)) {
 					return 1;
@@ -244,6 +245,7 @@ static bool is_local_def(zend_op_array *op_array, zend_ssa *ssa, int def, int va
 				 && !ce->__get
 				 && !ce->__set
 				 && !ce->__isset
+				 && !ce->num_hooked_props
 				 && !ce->parent) {
 					return 1;
 				}
diff --git a/ext/opcache/tests/opt/dce_017.phpt b/ext/opcache/tests/opt/dce_017.phpt
new file mode 100644
index 00000000000..0cf8ad9bf36
--- /dev/null
+++ b/ext/opcache/tests/opt/dce_017.phpt
@@ -0,0 +1,55 @@
+--TEST--
+DCE must not remove assignments to properties of an object escaping through a property hook
+--INI--
+opcache.enable=1
+opcache.enable_cli=1
+opcache.optimization_level=-1
+opcache.file_update_protection=0
+--EXTENSIONS--
+opcache
+--FILE--
+<?php
+
+class D {
+    public $x = 0;
+    public $h {
+        get {
+            global $g;
+            $g = $this;
+            return 1;
+        }
+    }
+}
+
+function g() {
+    $o = new D;
+    $o->h;
+    $o->x = 42;
+}
+
+g();
+var_dump($g->x);
+
+class E {
+    public $x = 0;
+    public $h {
+        set {
+            global $g;
+            $g = $this;
+        }
+    }
+}
+
+function h() {
+    $o = new E;
+    $o->h = 1;
+    $o->x = 42;
+}
+
+h();
+var_dump($g->x);
+
+?>
+--EXPECT--
+int(42)
+int(42)