Rollup merge of #108003 - chenyukang:yukang/fix-107998, r=compiler-errors

Avoid ICE when the generic_span is empty

Fixes #107998
r? ```@TaKO8Ki```
This commit is contained in:
Matthias Krüger 2023-02-14 18:02:51 +01:00 committed by GitHub
commit 1f486f0a9b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 1 deletions

View File

@ -837,9 +837,17 @@ pub trait LintContext: Sized {
(use_span, "'_".to_owned())
};
debug!(?deletion_span, ?use_span);
// issue 107998 for the case such as a wrong function pointer type
// `deletion_span` is empty and there is no need to report lifetime uses here
let suggestions = if deletion_span.is_empty() {
vec![(use_span, replace_lt)]
} else {
vec![(deletion_span, String::new()), (use_span, replace_lt)]
};
db.multipart_suggestion(
msg,
vec![(deletion_span, String::new()), (use_span, replace_lt)],
suggestions,
Applicability::MachineApplicable,
);
}

View File

@ -0,0 +1,9 @@
#![deny(single_use_lifetimes)]
fn with<R>(f: &fn<'a>(x: &'a i32) -> R) -> R {
//~^ ERROR function pointer types may not have generic parameters
//~| ERROR lifetime parameter `'a` only used once
f(&3)
}
fn main() {}

View File

@ -0,0 +1,30 @@
error: function pointer types may not have generic parameters
--> $DIR/issue-107998.rs:3:18
|
LL | fn with<R>(f: &fn<'a>(x: &'a i32) -> R) -> R {
| ^^^^
|
help: consider moving the lifetime parameter to a `for` parameter list
|
LL - fn with<R>(f: &fn<'a>(x: &'a i32) -> R) -> R {
LL + fn with<R>(f: &for<'a> fn(x: &'a i32) -> R) -> R {
|
error: lifetime parameter `'a` only used once
--> $DIR/issue-107998.rs:3:19
|
LL | fn with<R>(f: &fn<'a>(x: &'a i32) -> R) -> R {
| ^^ ---
| | |
| | ...is used only here
| | help: elide the single-use lifetime
| this lifetime...
|
note: the lint level is defined here
--> $DIR/issue-107998.rs:1:9
|
LL | #![deny(single_use_lifetimes)]
| ^^^^^^^^^^^^^^^^^^^^
error: aborting due to 2 previous errors