@@ -9164,6 +9164,7 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
9164
9164
9165
9165
zval name_zv ;
9166
9166
ZVAL_STR (& name_zv , name );
9167
+ GC_ADDREF (name );
9167
9168
9168
9169
// configure the current ce->flags for a nested class. This should only include:
9169
9170
// - final
@@ -9182,8 +9183,12 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
9182
9183
// - a constant that contains the name of the nested class
9183
9184
// this "tricks" the engine into thinking that the nested class is a normal class
9184
9185
zend_type t = ZEND_TYPE_INIT_CODE (IS_STRING , 0 , 0 );
9185
- zend_declare_typed_property (CG (active_class_entry ), unqualified_name , & name_zv , propFlags | ZEND_ACC_STATIC | ZEND_ACC_READONLY , decl -> doc_comment , t );
9186
- zend_declare_class_constant_ex (CG (active_class_entry ), unqualified_name , & name_zv , propFlags , decl -> doc_comment );
9186
+ zval propz , constz ;
9187
+ ZVAL_COPY_OR_DUP (& propz , & name_zv );
9188
+ ZVAL_COPY_OR_DUP (& constz , & name_zv );
9189
+ zend_declare_typed_property (CG (active_class_entry ), unqualified_name , & propz , propFlags | ZEND_ACC_STATIC | ZEND_ACC_READONLY , decl -> doc_comment , t );
9190
+ zend_declare_class_constant_ex (CG (active_class_entry ), unqualified_name , & constz , propFlags , decl -> doc_comment );
9191
+ ZVAL_PTR_DTOR (& name_zv );
9187
9192
9188
9193
// if a class is private or protected, we need to require scope for type checks
9189
9194
ce -> required_scope = propFlags & (ZEND_ACC_PROTECTED |ZEND_ACC_PRIVATE ) ? CG (active_class_entry ) : NULL ;
0 commit comments