https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101876
--- Comment #2 from Marius Hillenbrand <mhillen at linux dot ibm.com> --- Narrowed down what triggers the issue after experimenting with another example: when the pragma sets 'vx' before the typedef, then the resulting type definition appears broken. when enabling 'vx' only after the typedef, then the example compiles successfully. updated example: #ifdef BROKEN #pragma GCC target("arch=z13") // note: z13 implies vx #else #pragma GCC target("arch=z13,no-vx") // ... so turn off 'vx' again #endif #include <vecintrin.h> typedef unsigned long long v2di __attribute__((vector_size(16))); #ifndef BROKEN #pragma GCC target("vx") #endif v2di foo(char *ptr) { v2di v = *(v2di *)ptr; v = vec_permi(v, v, 0); return v; } Compile fails gcc -march=z10 -O3 -DBROKEN -c -S -o- example.c but succeeds without -DBROKEN