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 > >
