rust/src/test/ui/macros/lint-trailing-macro-call.rs
Aaron Hill bd4c9676c7
Fix linting when trailing macro expands to a trailing semi
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.
2021-09-15 19:36:28 -05:00

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!()
}