* lib/gettext.h (gettext, dgettext, dcgettext): When defining no-op macros, be more consistent about always "using" the arguments; this pacifies clang -Wunused-parameter when --disable-nls is used. Also, be more consistent about using compound literals rather than casts, for better type checking. --- ChangeLog | 9 +++++++++ lib/gettext.h | 20 +++++++++++--------- 2 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/ChangeLog b/ChangeLog index 5caceed13e..6690d65c97 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2026-08-24 Paul Eggert <[email protected]> + + gettext: more-consistent no-op macros + * lib/gettext.h (gettext, dgettext, dcgettext): When defining + no-op macros, be more consistent about always "using" the + arguments; this pacifies clang -Wunused-parameter when + --disable-nls is used. Also, be more consistent about using + compound literals rather than casts, for better type checking. + 2026-08-22 Paul Eggert <[email protected]> announce-gen: decrease clutter in output of advice diff --git a/lib/gettext.h b/lib/gettext.h index 4238340305..8ae3885fd7 100644 --- a/lib/gettext.h +++ b/lib/gettext.h @@ -162,11 +162,13 @@ dcgettext (const char *domain, const char *msgid, int category) # endif # elif defined __clang__ # undef gettext -# define gettext(Msgid) ((const char *) (Msgid)) +# define gettext(Msgid) ((const char *) {(Msgid)}) # undef dgettext -# define dgettext(Domainname, Msgid) gettext (Msgid) +# define dgettext(Domainname, Msgid) \ + ((void) (const char *) {(Domainname)}, gettext (Msgid)) # undef dcgettext -# define dcgettext(Domainname, Msgid, Category) dgettext (Domainname, Msgid) +# define dcgettext(Domainname, Msgid, Category) \ + ((void) (int) {(Category)}, dgettext (Domainname, Msgid)) # else /* The conversions to 'const char *' via compound literals serve the purpose of producing warnings for invalid uses of the value returned from these @@ -186,13 +188,13 @@ dcgettext (const char *domain, const char *msgid, int category) # if (defined __GNUC__ && defined __cplusplus) || defined __clang__ # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ - ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) + ((N) == 1 ? (const char *) {(Msgid1)} : (const char *) {(Msgid2)}) # undef dngettext # define dngettext(Domainname, Msgid1, Msgid2, N) \ - ngettext (Msgid1, Msgid2, N) + ((void) (const char *) {(Domainname)}, ngettext (Msgid1, Msgid2, N)) # undef dcngettext # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ - dngettext (Domainname, Msgid1, Msgid2, N) + ((void) (int) {(Category)}, dngettext (Domainname, Msgid1, Msgid2, N)) # elif defined __GNUC__ && !defined __cplusplus /* Silence -Wuseless-cast warnings. */ # if __GNUC__ >= 14 @@ -200,13 +202,13 @@ dcgettext (const char *domain, const char *msgid, int category) # endif # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ - ((N) == 1 ? (const char *) (Msgid1) : (const char *) (Msgid2)) + ((N) == 1 ? (const char *) {(Msgid1)} : (const char *) {(Msgid2)}) # undef dngettext # define dngettext(Domainname, Msgid1, Msgid2, N) \ - ((void) (const char *) (Domainname), ngettext (Msgid1, Msgid2, N)) + ((void) (const char *) {(Domainname)}, ngettext (Msgid1, Msgid2, N)) # undef dcngettext # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ - ((void) (int) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) + ((void) (int) {(Category)}, dngettext (Domainname, Msgid1, Msgid2, N)) # else /* The conversions to 'const char *' via compound literals serve the purpose of producing warnings for invalid uses of the value returned from these -- 2.55.0
