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.

Reply via email to