Commit 3554f524a56 for php

commit 3554f524a56cf2f8fb39b77fc3113a14de5a76cf
Author: Jorg Sowa <jorg.sowa@gmail.com>
Date:   Thu Nov 12 13:26:40 2026 +0100

    Fix AST export of by-reference property hooks (GH-25069)

    ZEND_ACC_RETURN_REFERENCE shares a bit with ZEND_ACC_PRIVATE_SET, so &get
    was exported as private(set) get.

    Closes GH-25069

diff --git a/NEWS b/NEWS
index e8051495b75..f8f42260fd1 100644
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,7 @@ PHP                                                                        NEWS
     (Jorg Sowa)
   . Fixed bug GH-25311 (Assertion ret == SUCCESS in array_map()/array_filter()
     after delayed out-of-memory). (ndossche)
+  . Fixed AST export of by-reference property hooks. (Jorg Sowa)

 - Curl:
   . Fixed curl_reset() retaining CURLOPT_PRIVATE after reset. (lacatoire)
diff --git a/Zend/tests/property_hooks/ast_printing_by_ref.phpt b/Zend/tests/property_hooks/ast_printing_by_ref.phpt
new file mode 100644
index 00000000000..a3b0bd405f7
--- /dev/null
+++ b/Zend/tests/property_hooks/ast_printing_by_ref.phpt
@@ -0,0 +1,34 @@
+--TEST--
+By-reference hook AST printing
+--FILE--
+<?php
+
+try {
+    assert(false && new class {
+        public $prop1 { &get => $this->prop1; }
+        public $prop2 {
+            final &get {
+                return $this->prop2;
+            }
+        }
+        public private(set) int $prop3 { &get => $this->prop3; }
+    });
+} catch (Error $e) {
+    echo $e->getMessage(), "\n";
+}
+
+?>
+--EXPECT--
+assert(false && new class {
+    public $prop1 {
+        &get => $this->prop1;
+    }
+    public $prop2 {
+        final &get {
+            return $this->prop2;
+        }
+    }
+    public private(set) int $prop3 {
+        &get => $this->prop3;
+    }
+})
diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c
index 0f20becf045..062983769a6 100644
--- a/Zend/zend_ast.c
+++ b/Zend/zend_ast.c
@@ -1788,10 +1788,12 @@ static ZEND_COLD void zend_ast_export_hook_list(smart_str *str, zend_ast_list *h

 	for (uint32_t i = 0; i < hook_list->children; i++) {
 		zend_ast_decl *hook = (zend_ast_decl *)hook_list->child[i];
-		zend_ast_export_visibility(str, hook->flags, ZEND_MODIFIER_TARGET_PROPERTY);
 		if (hook->flags & ZEND_ACC_FINAL) {
 			smart_str_appends(str, "final ");
 		}
+		if (hook->flags & ZEND_ACC_RETURN_REFERENCE) {
+			smart_str_appendc(str, '&');
+		}
 		smart_str_append(str, hook->name);
 		zend_ast *body = hook->child[2];
 		if (body == NULL) {