Skip to content

Commit 2728af7

Browse files
committed
rustc_pass_by_value: handle inferred generic types (with _)
1 parent 959bf2b commit 2728af7

File tree

3 files changed

+25
-15
lines changed

3 files changed

+25
-15
lines changed

compiler/rustc_lint/src/pass_by_value.rs

+5-9
Original file line numberDiff line numberDiff line change
@@ -73,19 +73,15 @@ fn gen_args(cx: &LateContext<'_>, segment: &PathSegment<'_>) -> String {
7373
let params = args
7474
.args
7575
.iter()
76-
.filter_map(|arg| match arg {
77-
GenericArg::Lifetime(lt) => Some(lt.name.ident().to_string()),
76+
.map(|arg| match arg {
77+
GenericArg::Lifetime(lt) => lt.name.ident().to_string(),
7878
GenericArg::Type(ty) => {
79-
let snippet =
80-
cx.tcx.sess.source_map().span_to_snippet(ty.span).unwrap_or_default();
81-
Some(snippet)
79+
cx.tcx.sess.source_map().span_to_snippet(ty.span).unwrap_or_default()
8280
}
8381
GenericArg::Const(c) => {
84-
let snippet =
85-
cx.tcx.sess.source_map().span_to_snippet(c.span).unwrap_or_default();
86-
Some(snippet)
82+
cx.tcx.sess.source_map().span_to_snippet(c.span).unwrap_or_default()
8783
}
88-
_ => None,
84+
GenericArg::Infer(_) => String::from("_"),
8985
})
9086
.collect::<Vec<_>>();
9187

src/test/ui-fulldeps/internal-lints/rustc_pass_by_value.rs

+5-3
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,13 @@ struct WithParameters<T, const N: usize, M = u32> {
105105
}
106106

107107
impl<T> WithParameters<T, 1> {
108-
fn test(
108+
fn test<'a>(
109109
value: WithParameters<T, 1>,
110-
reference: &WithParameters<T, 1>, //~ ERROR passing `WithParameters<T, 1>` by reference
110+
reference: &'a WithParameters<T, 1>, //~ ERROR passing `WithParameters<T, 1>` by reference
111111
reference_with_m: &WithParameters<T, 1, u32>, //~ ERROR passing `WithParameters<T, 1, u32>` by reference
112-
) {
112+
) -> &'a WithParameters<T, 1> {
113+
//~^ ERROR passing `WithParameters<T, 1>` by reference
114+
reference as &WithParameters<_, 1> //~ ERROR passing `WithParameters<_, 1>` by reference
113115
}
114116
}
115117

src/test/ui-fulldeps/internal-lints/rustc_pass_by_value.stderr

+15-3
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,26 @@ LL | reference: &CustomAlias,
103103
error: passing `WithParameters<T, 1>` by reference
104104
--> $DIR/rustc_pass_by_value.rs:110:20
105105
|
106-
LL | reference: &WithParameters<T, 1>,
107-
| ^^^^^^^^^^^^^^^^^^^^^ help: try passing by value: `WithParameters<T, 1>`
106+
LL | reference: &'a WithParameters<T, 1>,
107+
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: try passing by value: `WithParameters<T, 1>`
108108

109109
error: passing `WithParameters<T, 1, u32>` by reference
110110
--> $DIR/rustc_pass_by_value.rs:111:27
111111
|
112112
LL | reference_with_m: &WithParameters<T, 1, u32>,
113113
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try passing by value: `WithParameters<T, 1, u32>`
114114

115-
error: aborting due to 18 previous errors
115+
error: passing `WithParameters<T, 1>` by reference
116+
--> $DIR/rustc_pass_by_value.rs:112:10
117+
|
118+
LL | ) -> &'a WithParameters<T, 1> {
119+
| ^^^^^^^^^^^^^^^^^^^^^^^^ help: try passing by value: `WithParameters<T, 1>`
120+
121+
error: passing `WithParameters<_, 1>` by reference
122+
--> $DIR/rustc_pass_by_value.rs:114:22
123+
|
124+
LL | reference as &WithParameters<_, 1>
125+
| ^^^^^^^^^^^^^^^^^^^^^ help: try passing by value: `WithParameters<_, 1>`
126+
127+
error: aborting due to 20 previous errors
116128

0 commit comments

Comments
 (0)