From: Nick Bowler Date: Thu, 21 Dec 2023 16:02:51 +0000 (-0500) Subject: libcdecl: Prefer __inline in public header with GCC. X-Git-Tag: v1.3~57 X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/commitdiff_plain/fd680aff4b56cdf9ece7d6ccfbd9e43ba88ef365 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. --- 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;