[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