1From 4728803cc8687431449c8c9fbfabb1da04943400 Mon Sep 17 00:00:00 2001 2From: "Georgi D. Sotirov" <gdsotirov@gmail.com> 3Date: Wed, 5 May 2021 14:16:46 +0300 4Subject: [PATCH] Add inline with SNAPPY_ATTRIBUTE_ALWAYS_INLINE 5 6Add inline with SNAPPY_ATTRIBUTE_ALWAYS_INLINE on AdvanceToNextTag to 7fix the following compilation errors and a warning with GCC: 8 9[ 2%] Building CXX object CMakeFiles/snappy.dir/snappy.cc.o 10/usr/bin/c++ -DHAVE_CONFIG_H -Dsnappy_EXPORTS 11-I/tmp/snappy-1.1.9/build -I/tmp/snappy-1.1.9 -O3 12-march=i586 -mtune=i686 -Wall -Wextra -fno-exceptions -fno-rtti -O3 13-DNDEBUG -fPIC -std=c++11 -o CMakeFiles/snappy.dir/snappy.cc.o -c 14/tmp/snappy-1.1.9/snappy.cc 15/tmp/snappy-1.1.9/snappy.cc:1017:8: warning: always_inline 16function might not be inlinable [-Wattributes] 17 size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) { 18 ^ 19/tmp/snappy-1.1.9/snappy.cc: In function 'std::pair<const 20unsigned char*, int> snappy::DecompressBranchless(const uint8_t*, const 21uint8_t*, ptrdiff_t, T, ptrdiff_t) [with T = char*; uint8_t = unsigned 22char; ptrdiff_t = int]': 23/tmp/snappy-1.1.9/snappy.cc:1017:8: error: inlining failed in 24call to always_inline 'size_t snappy::AdvanceToNextTag(const uint8_t**, 25size_t*)': function body can be overwritten at link time 26/tmp/snappy-1.1.9/snappy.cc:1097:53: error: called from here 27 size_t tag_type = AdvanceToNextTag(&ip, &tag); 28 ^ 29/tmp/snappy-1.1.9/snappy.cc:1017:8: error: inlining failed in 30call to always_inline 'size_t snappy::AdvanceToNextTag(const uint8_t**, 31size_t*)': function body can be overwritten at link time 32 size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) { 33 ^ 34/tmp/snappy-1.1.9/snappy.cc:1097:53: error: called from here 35 size_t tag_type = AdvanceToNextTag(&ip, &tag); 36 ^ 37/tmp/snappy-1.1.9/snappy.cc:1017:8: error: inlining failed in 38call to always_inline 'size_t snappy::AdvanceToNextTag(const uint8_t**, 39size_t*)': function body can be overwritten at link time 40 size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) { 41 ^ 42/tmp/snappy-1.1.9/snappy.cc:1097:53: error: called from here 43 size_t tag_type = AdvanceToNextTag(&ip, &tag); 44 ^ 45CMakeFiles/snappy.dir/build.make:137: recipe for target 46'CMakeFiles/snappy.dir/snappy.cc.o' failed 47 48Just like with other functions using SNAPPY_ATTRIBUTE_ALWAYS_INLINE 49macro (i.e. __attribute__((always_inline)) ) it is necessary to use C++ 50inline specifier. 51 52Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com> 53 54Upstream-Status: Submitted [https://github.com/google/snappy/pull/128] 55--- 56 snappy.cc | 2 +- 57 1 file changed, 1 insertion(+), 1 deletion(-) 58 59diff --git a/snappy.cc b/snappy.cc 60index 79dc0e8..51157be 100644 61--- a/snappy.cc 62+++ b/snappy.cc 63@@ -1014,7 +1014,7 @@ void MemMove(ptrdiff_t dst, const void* src, size_t size) { 64 } 65 66 SNAPPY_ATTRIBUTE_ALWAYS_INLINE 67-size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) { 68+inline size_t AdvanceToNextTag(const uint8_t** ip_p, size_t* tag) { 69 const uint8_t*& ip = *ip_p; 70 // This section is crucial for the throughput of the decompression loop. 71 // The latency of an iteration is fundamentally constrained by the 72