Bug#1042009: onetbb: FTBFS on armel: error: ‘void __atomic_store_1(volatile void*, unsigned char, int) ’ writing 1 byte into a region of size 0 overflows the destination [-Werror=stringop-overflow=]

Petter Reinholdtsen pere at hungry.com
Mon Jul 31 07:38:10 BST 2023


I suspect this trigger a compiler bug on armel, as the code seem just
fine with me.  I have tested on armel and managed to get the code
building with the following patch.

diff --git a/src/tbb/concurrent_monitor.h b/src/tbb/concurrent_monitor.h
index 3d20ef5b..b010b2e5 100644
--- a/src/tbb/concurrent_monitor.h
+++ b/src/tbb/concurrent_monitor.h
@@ -23,6 +23,7 @@
 #include "concurrent_monitor_mutex.h"
 #include "semaphore.h"
 
+#include <assert.h>
 #include <atomic>
 
 namespace tbb {
@@ -289,8 +290,10 @@ public:
             my_epoch.store(my_epoch.load(std::memory_order_relaxed) + 1, std::memory_order_relaxed);
             n = my_waitset.front();
             if (n != end) {
+                wait_node<Context>* wn = to_wait_node(n);
+                assert(to_wait_node(n));
+                wn->my_is_in_list.store(false, std::memory_order_relaxed);
                 my_waitset.remove(*n);
-                to_wait_node(n)->my_is_in_list.store(false, std::memory_order_relaxed);
             }
         }
 

I have no idea why this help.  I am not yet sure if it is the reordering
or the use of assert() improving the situation, as the round trip time
is 2-3 hours on abel.debian.org, but will continue trying to reduce the
change set a bit more.  I do not know the code enough to know, but
need to make sure reordering the .remove() and the .store() do not cause
some race condition.  I hope the use of my_mutex ensure it does not.

-- 
Happy hacking
Petter Reinholdtsen



More information about the debian-science-maintainers mailing list