On Wed, 8 Jun 2016, James Greenhalgh wrote: > My question is whether you consider the different behaviour between scalar > float16_t and vector-of-float16_t types to be a bug? I can think of some
No, because it matches how things work for vectors of integer types. E.g.: typedef unsigned char vuc __attribute__((vector_size(8))); vuc a = { 128, 128, 128, 128, 128, 128, 128, 128 }, b; int main (void) { b = a / (a + a); return 0; } (Does a divide-by-zero, because (a + a) is evaluated without promotion to vector of int.) It's a general rule for vector operations that there are no promotions that change the bit-size of the vectors, so arithmetic is done directly on unsigned char in this case, even though it normally would not be. Conversions when the types match apart from signedness are, as the comment in c_common_type notes, not fully defined. /* If one type is a vector type, return that type. (How the usual arithmetic conversions apply to the vector types extension is not precisely specified.) */ -- Joseph S. Myers jos...@codesourcery.com