From fd680aff4b56cdf9ece7d6ccfbd9e43ba88ef365 Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Thu, 21 Dec 2023 11:02:51 -0500 Subject: [PATCH] libcdecl: Prefer __inline in public header with GCC. If the library is built using GCC with default options, the configure tests for inline will determine it is supported, and the installed headers will use it. But that doesn't mean the user is running the compiler in the exactly the same mode when including the headers. If they then use GCC in strict C89 mode, "inline" is not recognized as a keyword and compilation will fail. We can avoid this problem by just always using __inline on GCC, with a fallback to the configure-detected result. --- src/cdecl.h | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/cdecl.h b/src/cdecl.h index 97f39bc..63034f4 100644 --- a/src/cdecl.h +++ b/src/cdecl.h @@ -21,6 +21,12 @@ #include #include +#if __GNUC__ +# define CDECL__INLINE __inline +#else +# define CDECL__INLINE inline +#endif + /* Compatibility typedefs */ #if HAVE__BOOL typedef _Bool cdecl_bool; @@ -109,12 +115,12 @@ void cdecl_free(struct cdecl *decl); size_t cdecl_explain(char *buf, size_t n, struct cdecl *decl); size_t cdecl_declare(char *buf, size_t n, struct cdecl *decl); -static inline int cdecl_spec_kind(const struct cdecl_declspec *spec) +static CDECL__INLINE int cdecl_spec_kind(const struct cdecl_declspec *spec) { return spec->type & ~(CDECL_SPEC_TYPE-1u); } -static inline int cdecl_is_abstract(const struct cdecl_declarator *d) +static CDECL__INLINE int cdecl_is_abstract(const struct cdecl_declarator *d) { while (d->child) d = d->child; -- 2.43.2