@@ -439,8 +439,7 @@ static void zend_file_cache_serialize_zval(zval *zv,
439439 SERIALIZE_PTR (Z_INDIRECT_P (zv ));
440440 break ;
441441 case IS_PTR :
442- /* Used by attributes on constants */
443- SERIALIZE_ATTRIBUTES (Z_PTR_P (zv ));
442+ /* Used by attributes on constants, will be handled separately */
444443 break ;
445444 default :
446445 ZEND_ASSERT (Z_TYPE_P (zv ) < IS_STRING );
@@ -560,6 +559,13 @@ static void zend_file_cache_serialize_op_array(zend_op_array *op_arra
560559 UNSERIALIZE_PTR (opline );
561560 end = opline + op_array -> last ;
562561 while (opline < end ) {
562+ if (opline -> opcode == ZEND_OP_DATA
563+ && (opline - 1 )-> opcode == ZEND_DECLARE_ATTRIBUTED_CONST
564+ ) {
565+ zval * literal = RT_CONSTANT (opline , opline -> op1 );
566+ SERIALIZE_ATTRIBUTES (Z_PTR_P (literal ));
567+ }
568+
563569#if ZEND_USE_ABS_CONST_ADDR
564570 if (opline -> op1_type == IS_CONST ) {
565571 SERIALIZE_PTR (opline -> op1 .zv );
@@ -1328,8 +1334,7 @@ static void zend_file_cache_unserialize_zval(zval *zv,
13281334 UNSERIALIZE_PTR (Z_INDIRECT_P (zv ));
13291335 break ;
13301336 case IS_PTR :
1331- /* Used by attributes on constants */
1332- UNSERIALIZE_ATTRIBUTES (Z_PTR_P (zv ));
1337+ /* Used by attributes on constants, will be handled separately */
13331338 break ;
13341339 default :
13351340 ZEND_ASSERT (Z_TYPE_P (zv ) < IS_STRING );
@@ -1500,6 +1505,13 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr
15001505 break ;
15011506 }
15021507#endif
1508+
1509+ if (opline -> opcode == ZEND_OP_DATA
1510+ && (opline - 1 )-> opcode == ZEND_DECLARE_ATTRIBUTED_CONST
1511+ ) {
1512+ zval * literal = RT_CONSTANT (opline , opline -> op1 );
1513+ UNSERIALIZE_ATTRIBUTES (Z_PTR_P (literal ));
1514+ }
15031515 zend_deserialize_opcode_handler (opline );
15041516 opline ++ ;
15051517 }
0 commit comments