https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96377
--- Comment #8 from rsandifo at gcc dot gnu.org <rsandifo at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #7) > I guess that is reasonable thing to do, if the two vector types aren't > really compatible one will get an error. > But then, for trunk, won't the stripping of the attributes from vector types > still mean that comp_type_attributes will return false when comparing the > destination vector type (the uint8x16_t one) with the one from the binary > expression (the same with stripped attribute, i.e. essentially a generic > vector) and thus the initialization will be considered erroneous? The initialization itself seems to work, since for vectors compatibility depends on vector_types_compatible_p. But the stripping of the attributes does still affect: #include <arm_neon.h> uint8x16_t foo (int c, uint8x16_t x, uint8x16_t y) { return c ? x + 1 : y; } which is wrongly rejected for C, but not C++. So I guess for trunk we need both fixes.