Oh, and given all that I said above, I think the inner-attribute form doesn't make sense, as it appears as though it should affect the block, not the entire if-statement (especially if it occurs inside of an else-block). Similarly, putting the attribute in between the expression and the block makes no sense.

Disallowing these usages also resolves the question of how to deal with needing to select between several behaviors. `if expr #[cfg(one)] { ... } #[cfg(two)] { ... } #[cfg(three)] { ... }` looks pretty nonsensical, especially if two of the configs match (or if none match).

Additionally, if we did allow `#[attr]` on just the block, that would imply that we should allow it on all expressions, not just statements. I can see why that might be desired, but in actual practice it seems like it would be extremely confusing. Restricting it to blocks instead of arbitrary expressions would lessen the confusion, but would reintroduce confusion over why you can't put an attribute on the block of an if-statement (and allowing that brings up the problems I already mentioned).

Overall, I think the simplest thing to do is to just allow it on match arms and on statements. Not on blocks or expressions (unless those happen to be statements as well).