Skip to content

Commit 422f9c5

Browse files
committed
Auto merge of #12317 - CBSpeir:issue_12291, r=y21
Add check for 'in_external_macro' and 'is_from_proc_macro' inside changelog: Fix #12291 #[tracing::instrument()] triggers infinite_loop Added an in_external_macro and is_from_proc_macro check to the [infinite_loop] lint
2 parents 250fd09 + b72996e commit 422f9c5

File tree

3 files changed

+52
-20
lines changed

3 files changed

+52
-20
lines changed

clippy_lints/src/loops/infinite_loop.rs

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
11
use clippy_utils::diagnostics::span_lint_and_then;
2-
use clippy_utils::{fn_def_id, is_lint_allowed};
2+
use clippy_utils::{fn_def_id, is_from_proc_macro, is_lint_allowed};
33
use hir::intravisit::{walk_expr, Visitor};
44
use hir::{Expr, ExprKind, FnRetTy, FnSig, Node};
55
use rustc_ast::Label;
66
use rustc_errors::Applicability;
77
use rustc_hir as hir;
8-
use rustc_lint::LateContext;
8+
use rustc_lint::{LateContext, LintContext};
9+
use rustc_middle::lint::in_external_macro;
910

1011
use super::INFINITE_LOOP;
1112

1213
pub(super) fn check<'tcx>(
1314
cx: &LateContext<'tcx>,
14-
expr: &Expr<'_>,
15+
expr: &Expr<'tcx>,
1516
loop_block: &'tcx hir::Block<'_>,
1617
label: Option<Label>,
1718
) {
@@ -34,6 +35,10 @@ pub(super) fn check<'tcx>(
3435
return;
3536
}
3637

38+
if in_external_macro(cx.sess(), expr.span) || is_from_proc_macro(cx, expr) {
39+
return;
40+
}
41+
3742
let mut loop_visitor = LoopVisitor {
3843
cx,
3944
label,

tests/ui/infinite_loops.rs

+27
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
//@no-rustfix
2+
//@aux-build:proc_macros.rs
3+
24
#![allow(clippy::never_loop)]
35
#![warn(clippy::infinite_loop)]
46

7+
extern crate proc_macros;
8+
use proc_macros::{external, with_span};
9+
510
fn do_something() {}
611

712
fn no_break() {
@@ -363,4 +368,26 @@ fn inf_loop_in_res() -> Result<(), i32> {
363368
})
364369
}
365370

371+
with_span! { span
372+
fn no_loop() {}
373+
}
374+
375+
with_span! { span
376+
fn with_loop() {
377+
loop {
378+
do_nothing();
379+
}
380+
}
381+
}
382+
383+
fn do_nothing() {}
384+
385+
fn span_inside_fn() {
386+
with_span! { span
387+
loop {
388+
do_nothing();
389+
}
390+
}
391+
}
392+
366393
fn main() {}

tests/ui/infinite_loops.stderr

+17-17
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error: infinite loop detected
2-
--> tests/ui/infinite_loops.rs:8:5
2+
--> tests/ui/infinite_loops.rs:13:5
33
|
44
LL | / loop {
55
LL | |
@@ -15,7 +15,7 @@ LL | fn no_break() -> ! {
1515
| ++++
1616

1717
error: infinite loop detected
18-
--> tests/ui/infinite_loops.rs:15:5
18+
--> tests/ui/infinite_loops.rs:20:5
1919
|
2020
LL | / loop {
2121
LL | |
@@ -32,7 +32,7 @@ LL | fn all_inf() -> ! {
3232
| ++++
3333

3434
error: infinite loop detected
35-
--> tests/ui/infinite_loops.rs:17:9
35+
--> tests/ui/infinite_loops.rs:22:9
3636
|
3737
LL | / loop {
3838
LL | |
@@ -49,7 +49,7 @@ LL | fn all_inf() -> ! {
4949
| ++++
5050

5151
error: infinite loop detected
52-
--> tests/ui/infinite_loops.rs:19:13
52+
--> tests/ui/infinite_loops.rs:24:13
5353
|
5454
LL | / loop {
5555
LL | |
@@ -63,7 +63,7 @@ LL | fn all_inf() -> ! {
6363
| ++++
6464

6565
error: infinite loop detected
66-
--> tests/ui/infinite_loops.rs:33:5
66+
--> tests/ui/infinite_loops.rs:38:5
6767
|
6868
LL | / loop {
6969
LL | |
@@ -74,7 +74,7 @@ LL | | }
7474
= help: if this is not intended, try adding a `break` or `return` condition in the loop
7575

7676
error: infinite loop detected
77-
--> tests/ui/infinite_loops.rs:46:5
77+
--> tests/ui/infinite_loops.rs:51:5
7878
|
7979
LL | / loop {
8080
LL | | fn inner_fn() -> ! {
@@ -90,7 +90,7 @@ LL | fn no_break_never_ret_noise() -> ! {
9090
| ++++
9191

9292
error: infinite loop detected
93-
--> tests/ui/infinite_loops.rs:89:5
93+
--> tests/ui/infinite_loops.rs:94:5
9494
|
9595
LL | / loop {
9696
LL | |
@@ -107,7 +107,7 @@ LL | fn break_inner_but_not_outer_1(cond: bool) -> ! {
107107
| ++++
108108

109109
error: infinite loop detected
110-
--> tests/ui/infinite_loops.rs:100:5
110+
--> tests/ui/infinite_loops.rs:105:5
111111
|
112112
LL | / loop {
113113
LL | |
@@ -124,7 +124,7 @@ LL | fn break_inner_but_not_outer_2(cond: bool) -> ! {
124124
| ++++
125125

126126
error: infinite loop detected
127-
--> tests/ui/infinite_loops.rs:114:9
127+
--> tests/ui/infinite_loops.rs:119:9
128128
|
129129
LL | / loop {
130130
LL | |
@@ -138,7 +138,7 @@ LL | fn break_outer_but_not_inner() -> ! {
138138
| ++++
139139

140140
error: infinite loop detected
141-
--> tests/ui/infinite_loops.rs:137:9
141+
--> tests/ui/infinite_loops.rs:142:9
142142
|
143143
LL | / loop {
144144
LL | |
@@ -155,7 +155,7 @@ LL | fn break_wrong_loop(cond: bool) -> ! {
155155
| ++++
156156

157157
error: infinite loop detected
158-
--> tests/ui/infinite_loops.rs:177:5
158+
--> tests/ui/infinite_loops.rs:182:5
159159
|
160160
LL | / loop {
161161
LL | |
@@ -172,7 +172,7 @@ LL | fn match_like() -> ! {
172172
| ++++
173173

174174
error: infinite loop detected
175-
--> tests/ui/infinite_loops.rs:218:5
175+
--> tests/ui/infinite_loops.rs:223:5
176176
|
177177
LL | / loop {
178178
LL | |
@@ -186,7 +186,7 @@ LL | fn match_like() -> ! {
186186
| ++++
187187

188188
error: infinite loop detected
189-
--> tests/ui/infinite_loops.rs:223:5
189+
--> tests/ui/infinite_loops.rs:228:5
190190
|
191191
LL | / loop {
192192
LL | |
@@ -203,7 +203,7 @@ LL | fn match_like() -> ! {
203203
| ++++
204204

205205
error: infinite loop detected
206-
--> tests/ui/infinite_loops.rs:328:9
206+
--> tests/ui/infinite_loops.rs:333:9
207207
|
208208
LL | / loop {
209209
LL | |
@@ -217,7 +217,7 @@ LL | fn problematic_trait_method() -> ! {
217217
| ++++
218218

219219
error: infinite loop detected
220-
--> tests/ui/infinite_loops.rs:338:9
220+
--> tests/ui/infinite_loops.rs:343:9
221221
|
222222
LL | / loop {
223223
LL | |
@@ -231,7 +231,7 @@ LL | fn could_be_problematic() -> ! {
231231
| ++++
232232

233233
error: infinite loop detected
234-
--> tests/ui/infinite_loops.rs:347:9
234+
--> tests/ui/infinite_loops.rs:352:9
235235
|
236236
LL | / loop {
237237
LL | |
@@ -245,7 +245,7 @@ LL | let _loop_forever = || -> ! {
245245
| ++++
246246

247247
error: infinite loop detected
248-
--> tests/ui/infinite_loops.rs:361:8
248+
--> tests/ui/infinite_loops.rs:366:8
249249
|
250250
LL | Ok(loop {
251251
| ________^

0 commit comments

Comments
 (0)