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.
#include <stddef.h>
#include <stdint.h>
+#if __GNUC__
+# define CDECL__INLINE __inline
+#else
+# define CDECL__INLINE inline
+#endif
+
/* Compatibility typedefs */
#if HAVE__BOOL
typedef _Bool cdecl_bool;
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;