error[E0308]: mismatched types --> $DIR/issue-81943.rs:7:9 | LL | f(|x| lib::d!(x)); | ^^^^^^^^^^ expected `()`, found `i32` | = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) error[E0308]: mismatched types --> $DIR/issue-81943.rs:8:28 | LL | f(|x| match x { tmp => { g(tmp) } }); | -------------------^^^^^^---- | | | | | expected `()`, found `i32` | expected this to be `()` | help: consider using a semicolon here | LL | f(|x| match x { tmp => { g(tmp); } }); | ^ help: consider using a semicolon here | LL | f(|x| match x { tmp => { g(tmp) } };); | ^ error[E0308]: mismatched types --> $DIR/issue-81943.rs:10:38 | LL | ($e:expr) => { match $e { x => { g(x) } } } | ------------------^^^^---- | | | | | expected `()`, found `i32` | expected this to be `()` LL | } LL | f(|x| d!(x)); | ----- in this macro invocation | = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info) help: consider using a semicolon here | LL | ($e:expr) => { match $e { x => { g(x); } } } | ^ help: consider using a semicolon here | LL | ($e:expr) => { match $e { x => { g(x) } }; } | ^ error: aborting due to 3 previous errors For more information about this error, try `rustc --explain E0308`.