On 2026/08/26 10:38 AM, Chinmay Rath wrote:
> From: Ojaswin Mujoo <[email protected]>
> 
> Use ##__VA_ARGS__ in TRANS* macros to allow variadic arguments to be
> optional instead of mandatory. "##" removes the preceding comma when
> __VA_ARGS__ is empty, enabling macros to work with functions that don't
> need extra parameters.
> 
> This avoid compilation errors when using a pattern like below:
> 
>   static bool do_wait(DisasContext *ctx, arg_X_wait *a)
>   {...}
> 
>   TRANS_FLAGS(WAIT, WAIT_ISA_2_X, do_wait)
> 
> Compilation Error:
> ../target/ppc/translate.c:5526:40: error: expected expression before ‘)’ token
>  5526 |         return FUNC(ctx, a, __VA_ARGS__);                      \
>       |                                        ^
> ../target/ppc/translate/storage-ctrl-impl.c.inc:368:1: note: in expansion of 
> macro ‘TRANS_FLAGS’
>   368 | TRANS_FLAGS(WAIT, WAIT_ISA_2_X, do_wait)
> 
> Signed-off-by: Ojaswin Mujoo <[email protected]>
> Reviewed-by: Glenn Miles <[email protected]>
> Signed-off-by: Chinmay Rath <[email protected]>
> ---
>  target/ppc/translate.c | 10 +++++-----
>  1 file changed, 5 insertions(+), 5 deletions(-)

Reviewed-by: Amit Machhiwal <[email protected]>

> 
> diff --git a/target/ppc/translate.c b/target/ppc/translate.c
> index 7100787a25..f7c7f53d82 100644
> --- a/target/ppc/translate.c
> +++ b/target/ppc/translate.c
> @@ -4719,29 +4719,29 @@ static int64_t dw_compose_ea(DisasContext *ctx, int x)
>   */
>  #define TRANS(NAME, FUNC, ...) \
>      static bool trans_##NAME(DisasContext *ctx, arg_##NAME *a) \
> -    { return FUNC(ctx, a, __VA_ARGS__); }
> +    { return FUNC(ctx, a, ##__VA_ARGS__); }
>  #define TRANS_FLAGS(FLAGS, NAME, FUNC, ...) \
>      static bool trans_##NAME(DisasContext *ctx, arg_##NAME *a) \
>      {                                                          \
>          REQUIRE_INSNS_FLAGS(ctx, FLAGS);                       \
> -        return FUNC(ctx, a, __VA_ARGS__);                      \
> +        return FUNC(ctx, a, ##__VA_ARGS__);                    \
>      }
>  #define TRANS_FLAGS2(FLAGS2, NAME, FUNC, ...) \
>      static bool trans_##NAME(DisasContext *ctx, arg_##NAME *a) \
>      {                                                          \
>          REQUIRE_INSNS_FLAGS2(ctx, FLAGS2);                     \
> -        return FUNC(ctx, a, __VA_ARGS__);                      \
> +        return FUNC(ctx, a, ##__VA_ARGS__);                    \
>      }
>  
>  #define TRANS64(NAME, FUNC, ...) \
>      static bool trans_##NAME(DisasContext *ctx, arg_##NAME *a) \
> -    { REQUIRE_64BIT(ctx); return FUNC(ctx, a, __VA_ARGS__); }
> +    { REQUIRE_64BIT(ctx); return FUNC(ctx, a, ##__VA_ARGS__); }
>  #define TRANS64_FLAGS2(FLAGS2, NAME, FUNC, ...) \
>      static bool trans_##NAME(DisasContext *ctx, arg_##NAME *a) \
>      {                                                          \
>          REQUIRE_64BIT(ctx);                                    \
>          REQUIRE_INSNS_FLAGS2(ctx, FLAGS2);                     \
> -        return FUNC(ctx, a, __VA_ARGS__);                      \
> +        return FUNC(ctx, a, ##__VA_ARGS__);                    \
>      }
>  
>  /* TODO: More TRANS* helpers for extra insn_flags checks. */
> -- 
> 2.55.0
> 
> 

Reply via email to