Hi :)
I help maintain the spack package manager when I can, currently users with intel compilers cannot build / install any version after 2.7.1 due to the usage of __builtin_shuffle (for some reason Intel still doesn't support this).
As far as I can tell, the easiest thing to do is to just disable the vectorized code (see patch below). I do not experience any compilation problems, but was unable to determine how to test this code. I could only find the fuzzer on GitHub and it wasn't clear to me which executable would even test this :/
Would the freetype team intend on accepting this patch? I will be creating a slightly different one for spack (minimal diff just changing 2 lines), but I took the liberty of re-lining up the operators since it looks like that's what was once going on here :)
diff --git a/src/sfnt/pngshim.c b/src/sfnt/pngshim.c
index 3acc1d551..ff40eab66 100644
--- a/src/sfnt/pngshim.c
+++ b/src/sfnt/pngshim.c
@@ -61,11 +61,13 @@
/* predates clang; the `__BYTE_ORDER__' preprocessor symbol was */
/* introduced in gcc 4.6 and clang 3.2, respectively. */
/* `__builtin_shuffle' for gcc was introduced in gcc 4.7.0. */
-#if ( ( defined( __GNUC__ ) && \
- ( ( __GNUC__ >= 5 ) || \
- ( ( __GNUC__ == 4 ) && ( __GNUC_MINOR__ >= 7 ) ) ) ) || \
- ( defined( __clang__ ) && \
- ( ( __clang_major__ >= 4 ) || \
+ /* Intel compilers do not currently support __builtin_shuffle. */
+#if !defined(__INTEL_COMPILER) /* NOTE: Intel check must be first. */ && \
+ ( ( defined( __GNUC__ ) && \
+ ( ( __GNUC__ >= 5 ) || \
+ ( ( __GNUC__ == 4 ) && ( __GNUC_MINOR__ >= 7 ) ) ) ) || \
+ ( defined( __clang__ ) && \
+ ( ( __clang_major__ >= 4 ) || \
( ( __clang_major__ == 3 ) && ( __clang_minor__ >= 2 ) ) ) ) ) && \
defined( __OPTIMIZE__ ) && \
defined( __SSE__ ) && \
Please let me know what you think / if there are any changes you would like. Thanks for freetype!
-Stephen McDowell