https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91031
Bug ID: 91031 Summary: wrong code generated when using compound literal Product: gcc Version: 9.1.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: crigler at users dot sourceforge.net Target Milestone: --- typedef long unsigned int size_t; void abort (void); int strcmp(const char *a, const char *b); size_t strlen (const char *__s); typedef struct { size_t size; const char *buffer; } String; void testme(const String *s) { if (s->size != strlen("testme")) abort(); if (strcmp(s->buffer, "testme") != 0) abort(); } int main() { const String *s = (void *)0; if (!s) { s = &(const String){.buffer = "testme", .size = strlen("testme")}; } testme(s); } Using GCC 9, s is left uninitialized when testme is called: $ gcc-9.1 -O2 g.c; ./a.out Aborted