diff --git a/compiler/rustc_passes/src/liveness.rs b/compiler/rustc_passes/src/liveness.rs index 4ceefa17bcf..f2c2521ab43 100644 --- a/compiler/rustc_passes/src/liveness.rs +++ b/compiler/rustc_passes/src/liveness.rs @@ -332,6 +332,11 @@ impl<'tcx> Visitor<'tcx> for IrMaps<'tcx> { } } + // Don't run unused pass for #[naked] + if self.tcx.has_attr(def_id, sym::naked) { + return; + } + if let Some(captures) = maps.tcx.typeck(local_def_id).closure_min_captures.get(&def_id) { for &var_hir_id in captures.keys() { let var_name = maps.tcx.hir().name(var_hir_id); diff --git a/src/test/ui/asm/naked-functions-unused.rs b/src/test/ui/asm/naked-functions-unused.rs index 1790541e009..e1f2362bb6f 100644 --- a/src/test/ui/asm/naked-functions-unused.rs +++ b/src/test/ui/asm/naked-functions-unused.rs @@ -50,8 +50,6 @@ pub mod normal { pub mod naked { #[naked] pub extern "sysv64" fn function(a: usize, b: usize) -> usize { - //~^ ERROR unused variable: `a` - //~| ERROR unused variable: `b` unsafe { asm!("", options(noreturn)); } } @@ -60,15 +58,11 @@ pub mod naked { impl Naked { #[naked] pub extern "sysv64" fn associated(a: usize, b: usize) -> usize { - //~^ ERROR unused variable: `a` - //~| ERROR unused variable: `b` unsafe { asm!("", options(noreturn)); } } #[naked] pub extern "sysv64" fn method(&self, a: usize, b: usize) -> usize { - //~^ ERROR unused variable: `a` - //~| ERROR unused variable: `b` unsafe { asm!("", options(noreturn)); } } } @@ -76,15 +70,11 @@ pub mod naked { impl super::Trait for Naked { #[naked] extern "sysv64" fn trait_associated(a: usize, b: usize) -> usize { - //~^ ERROR unused variable: `a` - //~| ERROR unused variable: `b` unsafe { asm!("", options(noreturn)); } } #[naked] extern "sysv64" fn trait_method(&self, a: usize, b: usize) -> usize { - //~^ ERROR unused variable: `a` - //~| ERROR unused variable: `b` unsafe { asm!("", options(noreturn)); } } } diff --git a/src/test/ui/asm/naked-functions-unused.stderr b/src/test/ui/asm/naked-functions-unused.stderr index 3fffd09e7a5..840353366b6 100644 --- a/src/test/ui/asm/naked-functions-unused.stderr +++ b/src/test/ui/asm/naked-functions-unused.stderr @@ -65,65 +65,5 @@ error: unused variable: `b` LL | extern "sysv64" fn trait_method(&self, a: usize, b: usize) -> usize { | ^ help: if this is intentional, prefix it with an underscore: `_b` -error: unused variable: `a` - --> $DIR/naked-functions-unused.rs:52:37 - | -LL | pub extern "sysv64" fn function(a: usize, b: usize) -> usize { - | ^ help: if this is intentional, prefix it with an underscore: `_a` - -error: unused variable: `b` - --> $DIR/naked-functions-unused.rs:52:47 - | -LL | pub extern "sysv64" fn function(a: usize, b: usize) -> usize { - | ^ help: if this is intentional, prefix it with an underscore: `_b` - -error: unused variable: `a` - --> $DIR/naked-functions-unused.rs:62:43 - | -LL | pub extern "sysv64" fn associated(a: usize, b: usize) -> usize { - | ^ help: if this is intentional, prefix it with an underscore: `_a` - -error: unused variable: `b` - --> $DIR/naked-functions-unused.rs:62:53 - | -LL | pub extern "sysv64" fn associated(a: usize, b: usize) -> usize { - | ^ help: if this is intentional, prefix it with an underscore: `_b` - -error: unused variable: `a` - --> $DIR/naked-functions-unused.rs:69:46 - | -LL | pub extern "sysv64" fn method(&self, a: usize, b: usize) -> usize { - | ^ help: if this is intentional, prefix it with an underscore: `_a` - -error: unused variable: `b` - --> $DIR/naked-functions-unused.rs:69:56 - | -LL | pub extern "sysv64" fn method(&self, a: usize, b: usize) -> usize { - | ^ help: if this is intentional, prefix it with an underscore: `_b` - -error: unused variable: `a` - --> $DIR/naked-functions-unused.rs:78:45 - | -LL | extern "sysv64" fn trait_associated(a: usize, b: usize) -> usize { - | ^ help: if this is intentional, prefix it with an underscore: `_a` - -error: unused variable: `b` - --> $DIR/naked-functions-unused.rs:78:55 - | -LL | extern "sysv64" fn trait_associated(a: usize, b: usize) -> usize { - | ^ help: if this is intentional, prefix it with an underscore: `_b` - -error: unused variable: `a` - --> $DIR/naked-functions-unused.rs:85:48 - | -LL | extern "sysv64" fn trait_method(&self, a: usize, b: usize) -> usize { - | ^ help: if this is intentional, prefix it with an underscore: `_a` - -error: unused variable: `b` - --> $DIR/naked-functions-unused.rs:85:58 - | -LL | extern "sysv64" fn trait_method(&self, a: usize, b: usize) -> usize { - | ^ help: if this is intentional, prefix it with an underscore: `_b` - -error: aborting due to 20 previous errors +error: aborting due to 10 previous errors