aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2023-10-30 17:43:03 +0200
committerLasse Collin <lasse.collin@tukaani.org>2023-10-30 18:44:32 +0200
commitdcfe5632992fb7f06f921da13fcdd84f83d0d285 (patch)
tree6054c2c63e70abce7724ec2f83da36874977bf7e /src
parentliblzma: Use lzma_attr_visibility_hidden on private extern declarations. (diff)
downloadxz-dcfe5632992fb7f06f921da13fcdd84f83d0d285.tar.xz
liblzma: #define lzma_always_inline in common.h.
Diffstat (limited to 'src')
-rw-r--r--src/liblzma/common/common.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/liblzma/common/common.h b/src/liblzma/common/common.h
index b09e8ddf..378923e4 100644
--- a/src/liblzma/common/common.h
+++ b/src/liblzma/common/common.h
@@ -98,6 +98,23 @@
# endif
#endif
+// MSVC has __forceinline which shouldn't be combined with the inline keyword
+// (results in a warning).
+//
+// GCC 3.1 added always_inline attribute so we don't need to check
+// for __GNUC__ version. Similarly, all relevant Clang versions
+// support it (at least Clang 3.0.0 does already).
+// Other compilers might support too which also support __has_attribute
+// (Solaris Studio) so do that check too.
+#if defined(_MSC_VER)
+# define lzma_always_inline __forceinline
+#elif defined(__GNUC__) || defined(__clang__) || defined(__INTEL_COMPILER) \
+ || lzma_has_attribute(__always_inline__)
+# define lzma_always_inline inline __attribute__((__always_inline__))
+#else
+# define lzma_always_inline inline
+#endif
+
// These allow helping the compiler in some often-executed branches, whose
// result is almost always the same.
#ifdef __GNUC__