diff --git a/compiler/rustc_mir_transform/src/liveness.rs b/compiler/rustc_mir_transform/src/liveness.rs index f7dc703560245..d9dd7f9c5b195 100644 --- a/compiler/rustc_mir_transform/src/liveness.rs +++ b/compiler/rustc_mir_transform/src/liveness.rs @@ -72,6 +72,11 @@ pub(crate) fn check_liveness<'tcx>(tcx: TyCtxt<'tcx>, def_id: LocalDefId) -> Den return DenseBitSet::new_empty(0); } + // Don't run unused pass for items generated by foreign macros + if tcx.def_span(parent).in_external_macro(tcx.sess.source_map()) { + return DenseBitSet::new_empty(0); + } + let mut body = &*tcx.mir_promoted(def_id).0.borrow(); let mut body_mem; diff --git a/tests/ui/liveness/auxiliary/aux_issue_147648.rs b/tests/ui/liveness/auxiliary/aux_issue_147648.rs new file mode 100644 index 0000000000000..ccb5ad6b8fc09 --- /dev/null +++ b/tests/ui/liveness/auxiliary/aux_issue_147648.rs @@ -0,0 +1,7 @@ +#[macro_export] +macro_rules! unused_assign { + ($x:ident) => { + let mut $x = 1; + $x = 2; + }; +} diff --git a/tests/ui/liveness/unused-assignments-from-macro-147648.rs b/tests/ui/liveness/unused-assignments-from-macro-147648.rs new file mode 100644 index 0000000000000..c32c281538b44 --- /dev/null +++ b/tests/ui/liveness/unused-assignments-from-macro-147648.rs @@ -0,0 +1,10 @@ +//@ check-pass +//@ aux-build:aux_issue_147648.rs + +#![deny(unused_assignments)] + +extern crate aux_issue_147648; + +fn main() { + aux_issue_147648::unused_assign!(y); +}