-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Open
Labels
C-bugCategory: Clippy is not doing the correct thingCategory: Clippy is not doing the correct thingI-false-positiveIssue: The lint was triggered on code it shouldn't haveIssue: The lint was triggered on code it shouldn't haveI-suggestion-causes-errorIssue: The suggestions provided by this Lint cause an ICE/error when appliedIssue: The suggestions provided by this Lint cause an ICE/error when appliedL-nurseryLint: Currently in the nursery groupLint: Currently in the nursery group
Description
Summary
.
Reproducer
I tried this code:
#![recursion_limit = "10"]
macro_rules! link {
($outer:ident, $inner:ident) => {
struct $outer($inner);
impl $outer {
fn new() -> $outer {
$outer($inner::new())
}
}
impl std::ops::Deref for $outer {
type Target = $inner;
fn deref(&self) -> &$inner {
&self.0
}
}
};
}
struct Bottom;
impl Bottom {
const fn new() -> Bottom {
Bottom
}
}
link!(A, B);
link!(B, C);
link!(C, D);
link!(D, E);
link!(E, F);
link!(F, G);
link!(G, H);
link!(H, I);
link!(I, J);
link!(J, K);
link!(K, Bottom);clippy sugttests touching the macro :s
warning: this could be a `const fn`
--> a.rs:6:13
|
6 | / fn new() -> $outer {
7 | | $outer($inner::new())
8 | | }
| |_____________^
...
38 | link!(K, Bottom);
| ---------------- in this macro invocation
|
= help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#missing_const_for_fn
= note: requested on the command line with `-W clippy::missing-const-for-fn`
= note: this warning originates in the macro `link` (in Nightly builds, run with -Z macro-backtrace for more info)
help: make the function `const`
|
6 | const fn new() -> $outer {
| +++++
the resulting code causes overflows:
error[E0275]: overflow evaluating the requirement `J: std::marker::Freeze`
|
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "20"]` attribute to your crate (`a`)
note: required because it appears within the type `I`
--> a.rs:36:7
|
36 | link!(I, J);
| ^
note: required because it appears within the type `H`
--> a.rs:35:7
|
35 | link!(H, I);
| ^
note: required because it appears within the type `G`
--> a.rs:34:7
|
34 | link!(G, H);
| ^
note: required because it appears within the type `F`
--> a.rs:33:7
|
33 | link!(F, G);
| ^
note: required because it appears within the type `E`
--> a.rs:32:7
|
32 | link!(E, F);
| ^
note: required because it appears within the type `D`
--> a.rs:31:7
|
31 | link!(D, E);
| ^
note: required because it appears within the type `C`
--> a.rs:30:7
|
30 | link!(C, D);
| ^
note: required because it appears within the type `B`
--> a.rs:29:7
|
29 | link!(B, C);
| ^
note: required because it appears within the type `A`
--> a.rs:28:7
|
28 | link!(A, B);
| ^
error[E0275]: overflow evaluating the requirement `K: std::marker::Freeze`
|
= help: consider increasing the recursion limit by adding a `#![recursion_limit = "20"]` attribute to your crate (`a`)
note: required because it appears within the type `J`
--> a.rs:37:7
|
37 | link!(J, K);
| ^
note: required because it appears within the type `I`
--> a.rs:36:7
|
36 | link!(I, J);
| ^
note: required because it appears within the type `H`
--> a.rs:35:7
|
35 | link!(H, I);
| ^
note: required because it appears within the type `G`
--> a.rs:34:7
|
34 | link!(G, H);
| ^
note: required because it appears within the type `F`
--> a.rs:33:7
|
33 | link!(F, G);
| ^
note: required because it appears within the type `E`
--> a.rs:32:7
|
32 | link!(E, F);
| ^
note: required because it appears within the type `D`
--> a.rs:31:7
|
31 | link!(D, E);
| ^
note: required because it appears within the type `C`
--> a.rs:30:7
|
30 | link!(C, D);
| ^
note: required because it appears within the type `B`
--> a.rs:29:7
|
29 | link!(B, C);
| ^
error: aborting due to 2 previous errors
Version
rustc 1.81.0-nightly (9c3bc805d 2024-06-27)
binary: rustc
commit-hash: 9c3bc805dd9cb84019c124b9a50fdff1e62a7ec9
commit-date: 2024-06-27
host: x86_64-unknown-linux-gnu
release: 1.81.0-nightly
LLVM version: 18.1.7
Additional Labels
No response
Metadata
Metadata
Assignees
Labels
C-bugCategory: Clippy is not doing the correct thingCategory: Clippy is not doing the correct thingI-false-positiveIssue: The lint was triggered on code it shouldn't haveIssue: The lint was triggered on code it shouldn't haveI-suggestion-causes-errorIssue: The suggestions provided by this Lint cause an ICE/error when appliedIssue: The suggestions provided by this Lint cause an ICE/error when appliedL-nurseryLint: Currently in the nursery groupLint: Currently in the nursery group