https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66341
Bug ID: 66341 Summary: Some casts wrongly produce a lvalue Product: gcc Version: 5.1.0 Status: UNCONFIRMED Severity: minor Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: kp.lehrmann+gcc at gmail dot com Target Milestone: --- Created attachment 35653 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=35653&action=edit gcc compiles ok instead of producing a "error: lvalue required as left operand of assignment" Hello, gcc (any version that I tried) allows some casts to produce a lvalue, whereas "error: lvalue required as left operand of assignment" would be expected. Basically, cast of the following form wrongly compile: struct B{ int *c;}; struct A{ struct B b;}; struct A a; int d = 5; (int*)((struct A *)(&a)->b.c) = &d; Note that if the first cast (int*) is replaced by a cast to any type but the type of the member in struct B, the expected error message is produced. For instance, (char*)((struct A *)(&a)->b.c) = &d; produce the expected error. Best regards