@@ -9164,6 +9164,7 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
91649164
91659165 zval name_zv ;
91669166 ZVAL_STR (& name_zv , name );
9167+ GC_ADDREF (name );
91679168
91689169 // configure the current ce->flags for a nested class. This should only include:
91699170 // - final
@@ -9182,8 +9183,12 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
91829183 // - a constant that contains the name of the nested class
91839184 // this "tricks" the engine into thinking that the nested class is a normal class
91849185 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 );
91879192
91889193 // if a class is private or protected, we need to require scope for type checks
91899194 ce -> required_scope = propFlags & (ZEND_ACC_PROTECTED |ZEND_ACC_PRIVATE ) ? CG (active_class_entry ) : NULL ;
0 commit comments