@huonw I have the same feeling. `if expr { ... }` feels like a single unit to me. If `#[attr]` were allowed on just the `{ ... }` then I would expect `if expr expr` to be valid (e.g. `if true println!("this works?");`. But it's not valid.

Given that, I also find the suggestion of `if expr { ... } else #[attr] if expr { ... }` to be invalid. An else-statement is also a syntactical construct where the body is either an if-statement or a braced block. And if you really think this should be valid, then I question what happens if the `#[cfg(foo)]` evaluates to false? You then have a bare `else` with no associated code. I think that if you want an attribute on an else-if then you just need to nest, as in `if expr { ... } else { #[attr] if expr { ... } }`. Usage of this should be rare enough that this nesting is not a problem.