bd4c9676c7
When a macro is used in the trailing expression position of a block (e.g. `fn foo() { my_macro!() }`), we currently parse it as an expression, rather than a statement. As a result, we ended up using the `NodeId` of the containing statement as our `lint_node_id`, even though we don't normally do this for macro calls. If such a macro expands to an expression with a `#[cfg]` attribute, then the trailing statement can get removed entirely. This lead to an ICE, since we were usng the `NodeId` of the expression to emit a lint. Ths commit makes us skip updating `lint_node_id` when handling a macro in trailing expression position. This will cause us to lint at the closest parent of the macro call.
17 lines
332 B
Rust
17 lines
332 B
Rust
// check-pass
|
|
//
|
|
// Ensures that we properly lint
|
|
// a removed 'expression' resulting from a macro
|
|
// in trailing expression position
|
|
|
|
macro_rules! expand_it {
|
|
() => {
|
|
#[cfg(FALSE)] 25; //~ WARN trailing semicolon in macro
|
|
//~| WARN this was previously
|
|
}
|
|
}
|
|
|
|
fn main() {
|
|
expand_it!()
|
|
}
|