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:
commit
1f486f0a9b
@ -837,9 +837,17 @@ fn lookup_with_diagnostics(
|
|||||||
(use_span, "'_".to_owned())
|
(use_span, "'_".to_owned())
|
||||||
};
|
};
|
||||||
debug!(?deletion_span, ?use_span);
|
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(
|
db.multipart_suggestion(
|
||||||
msg,
|
msg,
|
||||||
vec![(deletion_span, String::new()), (use_span, replace_lt)],
|
suggestions,
|
||||||
Applicability::MachineApplicable,
|
Applicability::MachineApplicable,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
9
tests/ui/single-use-lifetime/issue-107998.rs
Normal file
9
tests/ui/single-use-lifetime/issue-107998.rs
Normal 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() {}
|
30
tests/ui/single-use-lifetime/issue-107998.stderr
Normal file
30
tests/ui/single-use-lifetime/issue-107998.stderr
Normal 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
|
||||||
|
|
Loading…
Reference in New Issue
Block a user