File tree Expand file tree Collapse file tree 12 files changed +21
-13
lines changed
Expand file tree Collapse file tree 12 files changed +21
-13
lines changed Original file line number Diff line number Diff line change @@ -39,7 +39,7 @@ struct _zend_call_info {
3939 bool named_args ; /* Function has named arguments */
4040 bool is_prototype ; /* An overridden child method may be called */
4141 int num_args ; /* Number of arguments, excluding named and variadic arguments */
42- zend_send_arg_info arg_info [1 ];
42+ zend_send_arg_info arg_info [1 ] ZEND_ELEMENT_COUNT ( num_args ) ;
4343};
4444
4545struct _zend_func_info {
Original file line number Diff line number Diff line change @@ -95,7 +95,7 @@ typedef struct _zend_trait_method_reference {
9595typedef struct _zend_trait_precedence {
9696 zend_trait_method_reference trait_method ;
9797 uint32_t num_excludes ;
98- zend_string * exclude_class_names [1 ];
98+ zend_string * exclude_class_names [1 ] ZEND_ELEMENT_COUNT ( num_excludes ) ;
9999} zend_trait_precedence ;
100100
101101typedef struct _zend_trait_alias {
Original file line number Diff line number Diff line change @@ -191,7 +191,7 @@ typedef struct _zend_ast_list {
191191 zend_ast_attr attr ;
192192 uint32_t lineno ;
193193 uint32_t children ;
194- zend_ast * child [1 ];
194+ zend_ast * child [1 ] ZEND_ELEMENT_COUNT ( children ) ;
195195} zend_ast_list ;
196196
197197/* Lineno is stored in val.u2.lineno */
Original file line number Diff line number Diff line change @@ -58,7 +58,7 @@ typedef struct _zend_attribute {
5858 /* Parameter offsets start at 1, everything else uses 0. */
5959 uint32_t offset ;
6060 uint32_t argc ;
61- zend_attribute_arg args [1 ];
61+ zend_attribute_arg args [1 ] ZEND_ELEMENT_COUNT ( argc ) ;
6262} zend_attribute ;
6363
6464typedef struct _zend_internal_attribute {
Original file line number Diff line number Diff line change @@ -327,6 +327,14 @@ char *alloca();
327327# define HAVE_BUILTIN_CONSTANT_P
328328#endif
329329
330+ #if __has_attribute(element_count)
331+ #define ZEND_ELEMENT_COUNT (m ) __attribute__((element_count(m)))
332+ #elif __has_attribute(counted_by)
333+ #define ZEND_ELEMENT_COUNT (m ) __attribute__((counted_by(m)))
334+ #else
335+ #define ZEND_ELEMENT_COUNT (m )
336+ #endif
337+
330338#ifdef HAVE_BUILTIN_CONSTANT_P
331339# define ZEND_CONST_COND (_condition, _default ) \
332340 (__builtin_constant_p(_condition) ? (_condition) : (_default))
Original file line number Diff line number Diff line change @@ -139,7 +139,7 @@ typedef struct {
139139
140140typedef struct {
141141 uint32_t num_types ;
142- zend_type types [1 ];
142+ zend_type types [1 ] ZEND_ELEMENT_COUNT ( num_types ) ;
143143} zend_type_list ;
144144
145145#define _ZEND_TYPE_EXTRA_FLAGS_SHIFT 25
@@ -374,7 +374,7 @@ struct _zend_string {
374374 zend_refcounted_h gc ;
375375 zend_ulong h ; /* hash value */
376376 size_t len ;
377- char val [1 ];
377+ char val [1 ] ZEND_ELEMENT_COUNT ( len ) ;
378378};
379379
380380typedef struct _Bucket {
@@ -572,7 +572,7 @@ struct _zend_resource {
572572typedef struct {
573573 size_t num ;
574574 size_t num_allocated ;
575- struct _zend_property_info * ptr [1 ];
575+ struct _zend_property_info * ptr [1 ] ZEND_ELEMENT_COUNT ( num ) ;
576576} zend_property_info_list ;
577577
578578typedef union {
Original file line number Diff line number Diff line change @@ -912,7 +912,7 @@ typedef struct _zend_ffi_callback_data {
912912 ffi_cif cif ;
913913 uint32_t arg_count ;
914914 ffi_type * ret_type ;
915- ffi_type * arg_types [0 ];
915+ ffi_type * arg_types [0 ] ZEND_ELEMENT_COUNT ( arg_count ) ;
916916} zend_ffi_callback_data ;
917917
918918static void zend_ffi_callback_hash_dtor (zval * zv ) /* {{{ */
Original file line number Diff line number Diff line change @@ -277,7 +277,7 @@ typedef struct {
277277
278278typedef struct {
279279 size_t cat_num ;
280- cdf_catalog_entry_t cat_e [1 ];
280+ cdf_catalog_entry_t cat_e [1 ] ZEND_ELEMENT_COUNT ( cat_num ) ;
281281} cdf_catalog_t ;
282282
283283struct timespec ;
Original file line number Diff line number Diff line change @@ -538,7 +538,7 @@ struct _zend_jit_trace_stack_frame {
538538 int used_stack ;
539539 int old_checked_stack ;
540540 int old_peek_checked_stack ;
541- zend_jit_trace_stack stack [1 ];
541+ zend_jit_trace_stack stack [1 ] ZEND_ELEMENT_COUNT ( used_stack ) ;
542542};
543543
544544#define TRACE_FRAME_SHIFT_NUM_ARGS 16
Original file line number Diff line number Diff line change 142142typedef struct _ir_refs {
143143 uint32_t count;
144144 uint32_t limit;
145- ir_ref refs[0];
145+ ir_ref refs[0] ZEND_ELEMENT_COUNT(count) ;
146146} ir_refs;
147147
148148#define ir_refs_size(_n) (offsetof(ir_refs, refs) + sizeof(ir_ref) * (_n))
You can’t perform that action at this time.
0 commit comments