https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65106
Bug ID: 65106 Summary: C99 intialization of struct with const member through a non-const pointer Product: gcc Version: 4.9.3 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: andrii.riabushenko at barclays dot com I noticed that such C99 code is valid in Clang, but not in GCC: #include<stdlib.h> struct A { int x; const int y; } struct A* make() { struct A *ptr = malloc(sizeof(struct A)); *ptr = (struct A) {10, 10}; } I find this language construct rather useful. I quickly scanned the C standard and I can't find the evidence that is actually prohibited. There is a difference between assignment a const member (ptr->y = 10) that should be prohibited and actual struct initialization through non-const pointer. For some reason GCC does not distinguish these 2 cases.