// check-pass
// edition:2018
+#![feature(stmt_expr_attributes)]
#![warn(semicolon_in_expressions_from_macros)]
#[allow(dead_code)]
macro_rules! foo {
($val:ident) => {
- true; //~ WARN trailing
- //~| WARN this was previously
- //~| WARN trailing
- //~| WARN this was previously
+ true; //~ WARN trailing semicolon in macro
+ //~| WARN this was previously accepted
+ //~| WARN trailing semicolon in macro
+ //~| WARN this was previously accepted
+ //~| WARN trailing semicolon in macro
+ //~| WARN this was previously accepted
}
}
}
fn main() {
- // This `allow` doesn't work
#[allow(semicolon_in_expressions_from_macros)]
let _ = {
foo!(first)
};
- // This 'allow' doesn't work either
#[allow(semicolon_in_expressions_from_macros)]
let _ = foo!(second);
- // But this 'allow' does
#[allow(semicolon_in_expressions_from_macros)]
fn inner() {
let _ = foo!(third);
async {
let _ = foo!(fourth);
};
+
+ let _ = {
+ foo!(warn_in_block)
+ };
+
+ let _ = foo!(warn_in_expr);
+
+ // This `#[allow]` does not work, since the attribute gets dropped
+ // when we expand the macro
+ let _ = #[allow(semicolon_in_expressions_from_macros)] foo!(allow_does_not_work);
}