[Tarantool-patches] [PATCH 2/2] bitset: fix GCC 10 build
Artem Starshov
artemreyt at tarantool.org
Fri Nov 20 05:23:50 MSK 2020
GCC 10 reports: "warning: writing 1 byte into
a region of size 0 [-Wstringop-overflow=]"
It's false positive. In order to fix build
i tried to add ignoring gcc -Wstringop-overflow via
preprocessor directive `pragma GCC ignored`.
But it doesn't work, so added -Wnostringop-overflow
flag in complier.cmake for gcc version equal or greather 10.
Explaining of false positive:
The problem is:
In file included from /root/ttar/src/lib/bitset/bitset.h:45,
from /root/ttar/src/lib/bitset/bitset.c:32:
In function ‘bit_set’,
inlined from ‘tt_bitset_set’ at /root/ttar/src/lib/bitset/bitset.c:112:14:
/root/ttar/src/lib/bit/bit.h:230:15: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
230 | ldata[chunk] |= (1UL << offset);
| ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
I made a research and found out that if to explicitly init bitset->realloc = realloc
than a warning is still triggers, but if not to call rb_tree functions (tt_bitset_pages_search and
tt_bitset_pages_insert) it's ok. But these functions don't allocate or free a memory, so they can't
influence on memory region which `page` variable points to.
Part-of #4966
---
cmake/compiler.cmake | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/cmake/compiler.cmake b/cmake/compiler.cmake
index db2ae6227..5db636812 100644
--- a/cmake/compiler.cmake
+++ b/cmake/compiler.cmake
@@ -430,3 +430,17 @@ else()
set(CMAKE_HOST_C_COMPILER ${CMAKE_C_COMPILER})
set(CMAKE_HOST_CXX_COMPILER ${CMAKE_CXX_COMPILER})
endif()
+
+if (CMAKE_COMPILER_IS_GNUCC AND CMAKE_C_COMPILER_VERSION VERSION_GREATER_EQUAL 10)
+# In file included from src/lib/bitset/bitset.h:45,
+# from src/lib/bitset/bitset.c:32:
+# In function ‘bit_set’,
+# inlined from ‘tt_bitset_set’ at src/lib/bitset/bitset.c:111:14:
+# src/lib/bit/bit.h:230:15: warning: writing 1 byte into a region of size 0 [-Wstringop-overflow=]
+# 230 | ldata[chunk] |= (1UL << offset);
+# | ~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
+#
+# false positive for gcc version 10
+# macro 'GCC diagnostic ignored "-Wstringop-overflow"' doesn't help
+ add_compile_flags("C" "-Wno-stringop-overflow")
+endif()
--
2.28.0
More information about the Tarantool-patches
mailing list