https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117197

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Keywords|                            |wrong-code
                 CC|                            |jsm28 at gcc dot gnu.org

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
doing

void d() { struct b e; e.a = 2;}

shows

t.c: In function ‘d’:
t.c:5:30: error: incompatible types when assigning to type ‘__vector(1) int’
from type ‘int’
    5 | void d() { struct b e; e.a = 2;}
      |                              ^

so I'm not sure if the initializer should be considered valid.

If valid I would have expected 'c' to fully initialize the vector and
.a = 2 as well?  But it seems the C frontend interprets e.a as "aggregate".
If that's intended this should be probably documented in the documentation
of the vector extension.

I'll note that

struct b {
  _Complex int a;
};
int c;
void d() { struct b e = {c, .a = 2}; }

results in

  struct b e = {.a=__complex__ (2, 0)};

so there's an (undiagnosed) duplicate initialization of e.a here and .a = 2
fully initializes the _Complex int.

I would have expected the vector int case to behave the same
as the _Complex int case here (but I have no idea whether _Complex handling
is correctly following the standard).

Reply via email to