Build failure on armel architecture (static assertion failed: is_always_lock_free)

Get help for specific problems
Posts: 58
Joined: 14 Aug 2022

daviank

Hello Zenju & all,

I'm having this error when building freefilesync on armel architecture:
../../zen/string_base.h:192:47: error: static assertion failed
  192 |             static_assert(decltype(refCount)::is_always_lock_free);
      |                                               ^~~~~~~~~~~~~~~~~~~
In file included from ../../zen/zstring.h:12,
                 from ffs_paths.h:10,
                 from ffs_paths.cpp:7:
../../zen/string_base.h: In instantiation of ‘static zen::StorageRefCountThreadSafe<Char, AP>::Descriptor* zen::StorageRefCountThreadSafe<Char, AP>::descr(Char*) [with Char = char; AP = zen::AllocatorOptimalSpeed]’:
../../zen/string_base.h:161:36:   required from ‘void zen::StorageRefCountThreadSafe<Char, AP>::destroy(Char*) [with Char = char; AP = zen::AllocatorOptimalSpeed]’
../../zen/string_base.h:393:18:   required from ‘zen::Zbase<Char, SP>::~Zbase() [with Char = char; SP = zen::DefaultStoragePolicy]’
../../zen/zstring.h:50:80:   required from here
../../zen/string_base.h:200:62: warning: cast from ‘char*’ to ‘zen::StorageRefCountThreadSafe<char, zen::AllocatorOptimalSpeed>::Descriptor*’ increases required alignment of target type [-Wcast-align]
  200 |     static       Descriptor* descr(      Char* ptr) { return reinterpret_cast<      Descriptor*>(ptr) - 1; }
      |                                                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../zen/string_base.h: In instantiation of ‘constexpr zen::StorageRefCountThreadSafe<Char, AP>::Descriptor::Descriptor(size_t, size_t) [with Char = char; AP = zen::AllocatorOptimalSpeed; size_t = unsigned int]’:
../../zen/string_base.h:211:47:   required from ‘zen::StorageRefCountThreadSafe<char, zen::AllocatorOptimalSpeed>::GlobalEmptyString zen::StorageRefCountThreadSafe<char, zen::AllocatorOptimalSpeed>::globalEmptyString’
../../zen/string_base.h:133:15:   required from ‘Char* zen::StorageRefCountThreadSafe<Char, AP>::create(size_t, size_t) [with Char = char; AP = zen::AllocatorOptimalSpeed; size_t = unsigned int]’
../../zen/string_base.h:126:46:   required from ‘Char* zen::StorageRefCountThreadSafe<Char, AP>::create(size_t) [with Char = char; AP = zen::AllocatorOptimalSpeed; size_t = unsigned int]’
../../zen/string_base.h:349:30:   required from ‘zen::Zbase<Char, SP>::Zbase() [with Char = char; SP = zen::DefaultStoragePolicy]’
../../zen/string_tools.h:359:54:   required from ‘S zen::beforeLast(const S&, const T&, IfNotFoundReturn) [with S = Zbase<char>; T = char]’
ffs_paths.cpp:28:56:   required from here
../../zen/string_base.h:211:47:   in ‘constexpr’ expansion of ‘zen::StorageRefCountThreadSafe<char, zen::AllocatorOptimalSpeed>::globalEmptyString.zen::StorageRefCountThreadSafe<char, zen::AllocatorOptimalSpeed>::GlobalEmptyString::GlobalEmptyString()’
../../zen/string_base.h:192:47: error: static assertion failed
  192 |             static_assert(decltype(refCount)::is_always_lock_free);
      |                                               ^~~~~~~~~~~~~~~~~~~
compilation terminated due to -Wfatal-errors.
make[1]: *** [Makefile:138: /tmp/FreeFileSync_Make/ffs/src/ffs_paths.cpp.o] Error 1
Could you please help? How can I fix this?