In this example: struct fooo {} ; struct fooo x; void test(void) { *({ 0; x/x; }); } We emit two diagnostics: one about x/x (good) and one about "indirection requires a pointer operand". The problem is that we correctly kill the expression tree for x/x, but that means that we build and return a compound statement with just { 0; } and the stmt expr gets built with type int. We should somehow propagate invalidity of the last statement in a stmt expr up into the stmt expr itself. This came from PR4065.