From: Vladimir Smirnov <ci...@gentoo.org> __builtin_shuffle was removed in clang 5.0.
Build log says: test/utils-prng.c:207:27: error: use of unknown builtin '__builtin_shuffle' [-Wimplicit-function-declaration] randdata.vb = __builtin_shuffle (randdata.vb, bswap_shufflemask); ^ test/utils-prng.c:207:25: error: assigning to 'uint8x16' (vector of 16 'uint8_t' values) from incompatible type 'int' randdata.vb = __builtin_shuffle (randdata.vb, bswap_shufflemask); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2 errors generated Link to original discussion: http://lists.llvm.org/pipermail/cfe-dev/2017-August/055140.html It's possible to build pixman if attached patch is applied. Basically patch adds check for __builtin_shuffle support and in case there is none, falls back to clang-specific __builtin_shufflevector that do the same but have different API. Bugzilla: https://bugs.gentoo.org/646360 Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=104886 Tested-by: Philip Chimento <philip.chime...@gmail.com> Reviewed-by: Matt Turner <matts...@gmail.com> --- I turned https://bugs.freedesktop.org/show_bug.cgi?id=104886#c2 into a Tested-by tag for Philip. I also reversed the order of the preprocessor conditions in order to simplify it a bit (the !defined(__clang__) looked like a problem waiting to happen). Unfortunately combiner-test, gradient-crash-test, and stress-test fail when built with clang for unrelated reasons. test/utils-prng.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/test/utils-prng.c b/test/utils-prng.c index c27b5be..0cf53dd 100644 --- a/test/utils-prng.c +++ b/test/utils-prng.c @@ -199,12 +199,25 @@ randmemset_internal (prng_t *prng, } else { + +#ifndef __has_builtin +#define __has_builtin(x) 0 +#endif + #ifdef HAVE_GCC_VECTOR_EXTENSIONS - const uint8x16 bswap_shufflemask = +# if __has_builtin(__builtin_shufflevector) + randdata.vb = + __builtin_shufflevector (randdata.vb, randdata.vb, + 3, 2, 1, 0, 7, 6 , 5, 4, + 11, 10, 9, 8, 15, 14, 13, 12); +# else + static const uint8x16 bswap_shufflemask = { 3, 2, 1, 0, 7, 6, 5, 4, 11, 10, 9, 8, 15, 14, 13, 12 }; randdata.vb = __builtin_shuffle (randdata.vb, bswap_shufflemask); +# endif + store_rand_128_data (buf, &randdata, aligned); buf += 16; #else -- 2.16.1 _______________________________________________ Pixman mailing list Pixman@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/pixman