Because it doesn't make sense to take the address of a COMPOUND_EXPR for example? As Kenner puts it himself:
"This turned out to be the "well known" problem that the Ada front end is making an ADDR_EXPR of odd things, in this case a COMPOUND_EXPR." So there you have it: a well known problem in the Ada front end, not a bug in the gimplifier. No, I meant "well known" as in "we've discussed it here before". There's certainly no problem with an ADDR_EXPR of a COMPOUND_EXPR conceptually. In C form, & (some_function (), foobar) makes perfect sense and is equivalent to (some_function (), &foobar). Indeed the case that was discussed on the list was an ADDR_EXPR of a CONSTRUCTOR. Here, the case is an ADDR_EXPR of a COMPOUND_EXPR whose result is a SAVE_EXPR. What would be your proposal as to which nodes it's valid to have as operands of an ADDR_EXPR? We certainly never even thought of such a rule before.