Currently we cannot distinguish between macro calls in item/statement vs. expression position, leading to unnecessary block_def_map computations. For example, in this code there's no need to compute block_def_map for the function block:
fn f() {
let x: mac![] = e!();
}
This is a very minor issue and is unlikely to impact performance or memory usage much.