diff --git a/internal.h b/internal.h index b83999464c..c9b16ca49a 100644 --- a/internal.h +++ b/internal.h @@ -2050,6 +2050,15 @@ rb_obj_builtin_type(VALUE obj) } #endif +/* A macro for defining a flexible array, like: VALUE ary[FLEX_ARY_LEN]; */ +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +# define FLEX_ARY_LEN /* VALUE ary[]; */ +#elif defined(__GNUC__) && !defined(__STRICT_ANSI__) +# define FLEX_ARY_LEN 0 /* VALUE ary[0]; */ +#else +# define FLEX_ARY_LEN 1 /* VALUE ary[1]; */ +#endif + #if defined(__cplusplus) #if 0 { /* satisfy cc-mode */ diff --git a/iseq.c b/iseq.c index 5cdac49de5..ee49026c9a 100644 --- a/iseq.c +++ b/iseq.c @@ -2836,15 +2836,7 @@ struct succ_index_table { unsigned int rank; uint64_t small_block_ranks; /* 9 bits * 7 = 63 bits */ uint64_t bits[512/64]; - } succ_part[ -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) - /* flexible array member */ -#elif defined(__GNUC__) && !defined(__STRICT_ANSI__) - 0 -#else - 1 -#endif - ]; + } succ_part[FLEX_ARY_LEN]; } succ_index_table; #define imm_block_rank_set(v, i, r) (v) |= (uint64_t)(r) << (7 * (i))