Source: xsimd Version: 10.0.0-1 Severity: normal Control: forwarded -1 https://github.com/xtensor-stack/xsimd/issues/889
The build of xsimd 10.0.0-1 fails on armhf due to test failure: test_xsimd: ./include/xsimd/types/xsimd_batch.hpp:567: void xsimd::batch<T, A>::store_aligned(U*) const [with U = unsigned char; T = unsigned char; A = xsimd::neon]: Assertion `((reinterpret_cast<uintptr_t>(mem) % A::alignment()) == 0) && "store location is not properly aligned"' failed. A gdb backtrace shows that xsimd::neon is involved: Reading symbols from ./test_xsimd... (gdb) run Starting program: /home/xsimd/xsimd-10.0.0/obj-arm-linux-gnueabihf/test/test_xsimd [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1". [doctest] doctest version is "2.4.9" [doctest] run with "--help" for options test_xsimd: ./include/xsimd/types/xsimd_batch.hpp:567: void xsimd::batch<T, A>::store_aligned(U*) const [with U = unsigned char; T = unsigned char; A = xsimd::neon]: Assertion `((reinterpret_cast<uintptr_t>(mem) % A::alignment()) == 0) && "store location is not properly aligned"' failed. Program received signal SIGABRT, Aborted. __libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:47 47 ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S: No such file or directory. (gdb) bt #0 __libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:47 #1 0xf7cce42c in __pthread_kill_implementation (threadid=4160618528, signo=signo@entry=6, no_tid=no_tid@entry=0) at pthread_kill.c:43 #2 0xf7cce470 in __pthread_kill_internal (signo=6, threadid=<optimized out>) at pthread_kill.c:78 #3 0xf7c9d322 in __GI_raise (sig=sig@entry=6) at ../sysdeps/posix/raise.c:26 #4 0xf7c8e0ac in __GI_abort () at abort.c:79 #5 0xf7c98850 in __assert_fail_base (fmt=0x20 <error: Cannot access memory at address 0x20>, assertion=0x122e7dc "((reinterpret_cast<uintptr_t>(mem) % A::alignment()) == 0) && \"store location is not properly aligned\"", assertion@entry=0xfffeed60 "", file=file@entry=0x20 <error: Cannot access memory at address 0x20>, line=line@entry=567, function=0x122e76c "void xsimd::batch<T, A>::store_aligned(U*) const [with U = unsigned char; T = unsigned char; A = xsimd::neon]", function@entry=0xf7fe0020 "") at assert.c:92 #6 0xf7c988ce in __GI___assert_fail (assertion=0xfffeed60 "", file=0x20 <error: Cannot access memory at address 0x20>, line=567, function=0xf7fe0020 "") at assert.c:101 #7 0x00eb4c86 in xsimd::batch<unsigned char, xsimd::neon>::store_aligned<unsigned char> (mem=0xfffeee68 "`b@\001\060\357\376\377\250\356\376\377\267\356\376\377$b@\001\307\356\376\377\001\001\001\001\001\001\001\001 a?\001\001\001\001\001 a?\001\001\062<F", this=<optimized out>) at ./include/xsimd/types/xsimd_batch.hpp:567 #8 0x00f2c8b0 in xsimd::batch<unsigned char, xsimd::neon>::store_aligned<unsigned char> (mem=<optimized out>, this=<optimized out>) at ./test/test_batch.cpp:707 #9 xsimd::kernel::swizzle<xsimd::neon, unsigned char, unsigned char, (unsigned char)8, (unsigned char)9, (unsigned char)10, (unsigned char)11, (unsigned char)12, (unsigned char)13, (unsigned char)14, (unsigned char)15, (unsigned char)0, (unsigned char)1, (unsigned char)0, (unsigned char)1, (unsigned char)0, (unsigned char)1, (unsigned char)0, (unsigned char)1> (self=...) at ./include/xsimd/types/../arch/./xsimd_neon.hpp:2602 #10 xsimd::swizzle<unsigned char, xsimd::neon, unsigned char, (unsigned char)8, (unsigned char)9, (unsigned char)10, (unsigned char)11, (unsigned char)12, (unsigned char)13, (unsigned char)14, (unsigned char)15, (unsigned char)0, (unsigned char)1, (unsigned char)0, (unsigned char)1, (unsigned char)0, (unsigned char)1, (unsigned char)0, (unsigned char)1> (mask=..., x=...) at ./include/xsimd/types/xsimd_api.hpp:2048 #11 xsimd::kernel::detail::reduce<xsimd::kernel::reduce_max<xsimd::neon, unsigned char>(xsimd::batch<unsigned char, xsimd::neon> const&, xsimd::generic const&)::{lambda(xsimd::batch<unsigned char, xsimd::neon> const&, xsimd::batch<unsigned char, xsimd::neon> const&)#1}, xsimd::neon, unsigned char, 16u>(xsimd::kernel::reduce_max<xsimd::neon, unsigned char>(xsimd::batch<unsigned char, xsimd::neon> const&, xsimd::generic const&)::{lambda(xsimd::batch<unsigned char, xsimd::neon> const&, xsimd::batch<unsigned char, xsimd::neon> const&)#1}, xsimd::batch<unsigned char, xsimd::neon> const&, std::integral_constant<unsigned int, 16u>) (op=..., self=...) at ./include/xsimd/types/../arch/././generic/xsimd_generic_math.hpp:2000 #12 xsimd::kernel::reduce_max<xsimd::neon, unsigned char> (self=...) at ./include/xsimd/types/../arch/././generic/xsimd_generic_math.hpp:2009 #13 xsimd::reduce_max<unsigned char, xsimd::neon> (x=...) at ./include/xsimd/types/xsimd_api.hpp:905 #14 batch_test<xsimd::batch<unsigned char, xsimd::neon> >::test_horizontal_operations (this=this@entry=0xfffef050) at ./test/test_batch.cpp:708 #15 0x00eb8888 in DOCTEST_ANON_TMP_623<xsimd::batch<unsigned char> > () at ./test/test_batch.cpp:881 #16 0x00e1c036 in doctest::Context::run (this=this@entry=0xfffef3f0) at /usr/include/doctest/doctest.h:6930 #17 0x00e07bf6 in main (argc=<optimized out>, argv=<optimized out>) at /usr/include/doctest/doctest.h:7008 It might be best to treat armhf as a non-supported arch (i.e. don't run build-time tests, perhaps not debian/tests either) at least until upstream resolves https://github.com/xtensor-stack/xsimd/issues/889 That said, it might now be possible to treat armel as a supported arch. Diagnosing the armhf problem on the Debian porterbox amdahl.debian.org, the sigabrt is reproducible on an armhf chroot. But testing also in a armel chroot, the tests pass. xsimd is supposed to have fixed scalar tests on "non-supported" architectures, e.g. https://github.com/xtensor-stack/xsimd/pull/785 So possibly that is what passed on armel. If that is the case then it might be safe to run xsimd tests on all arches (meaning that scalar tests would be run on non-supported arches). But in any case it looks like we should skip armhf tests for the time being.