https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88766
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |msebor at gcc dot gnu.org --- Comment #4 from Martin Sebor <msebor at gcc dot gnu.org> --- I don't disagree with the conclusion about the validity of this test case but there are examples where GCC does treat a statement expression as an lvalue, such as in the following: void f (void) { int i = 0; ++__extension__({ (int)i; }); // accepted if (i != 1) // folded to false __builtin_abort (); } Accepting this seems like a bug irrespective of whether statement expressions themselves are ever lvalues. GCC of course also accepts ++({ i; }). Joseph's comment #2 suggests this should be invalid as well but I might be reading too much into it. In any case, it would be helpful to make this clear in the manual.