diff --git a/CMakeLists.txt b/CMakeLists.txt index 68686f7..1ac1aff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -103,6 +103,13 @@ int main() { return __builtin_ctzll(0); }" HAVE_BUILTIN_CTZ) +check_cxx_source_compiles(" +__attribute__((always_inline)) int zero() { return 0; } + +int main() { + return zero(); +}" HAVE_ATTRIBUTE_ALWAYS_INLINE) + check_cxx_source_compiles(" #include diff --git a/cmake/config.h.in b/cmake/config.h.in index 24f27ef..ec2a3da 100644 --- a/cmake/config.h.in +++ b/cmake/config.h.in @@ -1,6 +1,9 @@ #ifndef THIRD_PARTY_SNAPPY_OPENSOURCE_CMAKE_CONFIG_H_ #define THIRD_PARTY_SNAPPY_OPENSOURCE_CMAKE_CONFIG_H_ +/* Define to 1 if the compiler supports __attribute__((always_inline)). */ +#cmakedefine HAVE_ATTRIBUTE_ALWAYS_INLINE 1 + /* Define to 1 if the compiler supports __builtin_ctz and friends. */ #cmakedefine HAVE_BUILTIN_CTZ 1 diff --git a/snappy-stubs-internal.h b/snappy-stubs-internal.h index c9a795c..6b6094f 100644 --- a/snappy-stubs-internal.h +++ b/snappy-stubs-internal.h @@ -37,7 +37,7 @@ #include #include -#include +#include #include #include @@ -107,6 +107,13 @@ #define SNAPPY_PREDICT_TRUE(x) x #endif +// Inlining hints. +#ifdef HAVE_ATTRIBUTE_ALWAYS_INLINE +#define SNAPPY_ATTRIBUTE_ALWAYS_INLINE __attribute__((always_inline)) +#else +#define SNAPPY_ATTRIBUTE_ALWAYS_INLINE +#endif + // This is only used for recomputing the tag byte table used during // decompression; for simplicity we just remove it from the open-source // version (anyone who wants to regenerate it can just do the call diff --git a/snappy.cc b/snappy.cc index a87fd76..0aab795 100644 --- a/snappy.cc +++ b/snappy.cc @@ -1358,7 +1358,7 @@ class SnappyArrayWriter { } } - ABSL_ATTRIBUTE_ALWAYS_INLINE + SNAPPY_ATTRIBUTE_ALWAYS_INLINE inline bool AppendFromSelf(size_t offset, size_t len, char** op_p) { char* const op = *op_p; char* const op_end = op + len;