Declare helper_info inside each gen_helper_* body so a comment on DEF_HELPER attaches to gen_helper_*, not helper_info_*. The extern still refers to the global from helper-info.c.inc. Silence -Wnested-externs around the HELPER_H expansion only.
Signed-off-by: Yonggang Luo <[email protected]> --- include/exec/helper-gen.h.inc | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/include/exec/helper-gen.h.inc b/include/exec/helper-gen.h.inc index dabe138e205..1a4dc27d436 100644 --- a/include/exec/helper-gen.h.inc +++ b/include/exec/helper-gen.h.inc @@ -11,49 +11,49 @@ #include "exec/helper-head.h.inc" #define DEF_HELPER_FLAGS_0(name, flags, ret) \ -extern TCGHelperInfo glue(helper_info_, name); \ static inline void glue(gen_helper_, name)(dh_retvar_decl0(ret)) \ { \ + extern TCGHelperInfo glue(helper_info_, name); \ tcg_gen_call0(glue(helper_info_,name).func, \ &glue(helper_info_,name), dh_retvar(ret)); \ } #define DEF_HELPER_FLAGS_1(name, flags, ret, t1) \ -extern TCGHelperInfo glue(helper_info_, name); \ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ dh_arg_decl(t1, 1)) \ { \ + extern TCGHelperInfo glue(helper_info_, name); \ tcg_gen_call1(glue(helper_info_,name).func, \ &glue(helper_info_,name), dh_retvar(ret), \ dh_arg(t1, 1)); \ } #define DEF_HELPER_FLAGS_2(name, flags, ret, t1, t2) \ -extern TCGHelperInfo glue(helper_info_, name); \ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ dh_arg_decl(t1, 1), dh_arg_decl(t2, 2)) \ { \ + extern TCGHelperInfo glue(helper_info_, name); \ tcg_gen_call2(glue(helper_info_,name).func, \ &glue(helper_info_,name), dh_retvar(ret), \ dh_arg(t1, 1), dh_arg(t2, 2)); \ } #define DEF_HELPER_FLAGS_3(name, flags, ret, t1, t2, t3) \ -extern TCGHelperInfo glue(helper_info_, name); \ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3)) \ { \ + extern TCGHelperInfo glue(helper_info_, name); \ tcg_gen_call3(glue(helper_info_,name).func, \ &glue(helper_info_,name), dh_retvar(ret), \ dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3)); \ } #define DEF_HELPER_FLAGS_4(name, flags, ret, t1, t2, t3, t4) \ -extern TCGHelperInfo glue(helper_info_, name); \ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), \ dh_arg_decl(t3, 3), dh_arg_decl(t4, 4)) \ { \ + extern TCGHelperInfo glue(helper_info_, name); \ tcg_gen_call4(glue(helper_info_,name).func, \ &glue(helper_info_,name), dh_retvar(ret), \ dh_arg(t1, 1), dh_arg(t2, 2), \ @@ -61,11 +61,11 @@ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ } #define DEF_HELPER_FLAGS_5(name, flags, ret, t1, t2, t3, t4, t5) \ -extern TCGHelperInfo glue(helper_info_, name); \ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \ dh_arg_decl(t4, 4), dh_arg_decl(t5, 5)) \ { \ + extern TCGHelperInfo glue(helper_info_, name); \ tcg_gen_call5(glue(helper_info_,name).func, \ &glue(helper_info_,name), dh_retvar(ret), \ dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \ @@ -73,11 +73,11 @@ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ } #define DEF_HELPER_FLAGS_6(name, flags, ret, t1, t2, t3, t4, t5, t6) \ -extern TCGHelperInfo glue(helper_info_, name); \ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \ dh_arg_decl(t4, 4), dh_arg_decl(t5, 5), dh_arg_decl(t6, 6)) \ { \ + extern TCGHelperInfo glue(helper_info_, name); \ tcg_gen_call6(glue(helper_info_,name).func, \ &glue(helper_info_,name), dh_retvar(ret), \ dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \ @@ -85,12 +85,12 @@ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ } #define DEF_HELPER_FLAGS_7(name, flags, ret, t1, t2, t3, t4, t5, t6, t7)\ -extern TCGHelperInfo glue(helper_info_, name); \ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ dh_arg_decl(t1, 1), dh_arg_decl(t2, 2), dh_arg_decl(t3, 3), \ dh_arg_decl(t4, 4), dh_arg_decl(t5, 5), dh_arg_decl(t6, 6), \ dh_arg_decl(t7, 7)) \ { \ + extern TCGHelperInfo glue(helper_info_, name); \ tcg_gen_call7(glue(helper_info_,name).func, \ &glue(helper_info_,name), dh_retvar(ret), \ dh_arg(t1, 1), dh_arg(t2, 2), dh_arg(t3, 3), \ @@ -98,7 +98,15 @@ static inline void glue(gen_helper_, name)(dh_retvar_decl(ret) \ dh_arg(t7, 7)); \ } +/* + * helper_info_* is declared inside gen_helper_* so a comment on + * DEF_HELPER attaches to gen_helper_*, not helper_info_*. That is a + * nested extern; silence -Wnested-externs for this expansion only. + */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wnested-externs" #include HELPER_H +#pragma GCC diagnostic pop #undef DEF_HELPER_FLAGS_0 #undef DEF_HELPER_FLAGS_1 -- 2.52.0.windows.1
