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]>
Signed-off-by: Chinmay Rath <[email protected]>
---
target/ppc/translate.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/target/ppc/translate.c b/target/ppc/translate.c
index 22125c30a5..a8ee87ffe2 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.53.0