fix underflow in check_manual_split_once
lint
This commit is contained in:
parent
917890babb
commit
23fd95a5e9
@ -45,16 +45,16 @@ pub(super) fn check_manual_split_once(
|
||||
IterUsageKind::Next | IterUsageKind::Second => {
|
||||
let self_deref = {
|
||||
let adjust = cx.typeck_results().expr_adjustments(self_arg);
|
||||
if adjust.is_empty() {
|
||||
if adjust.len() < 2 {
|
||||
String::new()
|
||||
} else if cx.typeck_results().expr_ty(self_arg).is_box()
|
||||
|| adjust
|
||||
.iter()
|
||||
.any(|a| matches!(a.kind, Adjust::Deref(Some(_))) || a.target.is_box())
|
||||
{
|
||||
format!("&{}", "*".repeat(adjust.len() - 1))
|
||||
format!("&{}", "*".repeat(adjust.len().saturating_sub(1)))
|
||||
} else {
|
||||
"*".repeat(adjust.len() - 2)
|
||||
"*".repeat(adjust.len().saturating_sub(2))
|
||||
}
|
||||
};
|
||||
if matches!(usage.kind, IterUsageKind::Next) {
|
||||
|
6
tests/ui/crashes/ice-8250.rs
Normal file
6
tests/ui/crashes/ice-8250.rs
Normal file
@ -0,0 +1,6 @@
|
||||
fn _f(s: &str) -> Option<()> {
|
||||
let _ = s[1..].splitn(2, '.').next()?;
|
||||
Some(())
|
||||
}
|
||||
|
||||
fn main() {}
|
18
tests/ui/crashes/ice-8250.stderr
Normal file
18
tests/ui/crashes/ice-8250.stderr
Normal file
@ -0,0 +1,18 @@
|
||||
error: manual implementation of `split_once`
|
||||
--> $DIR/ice-8250.rs:2:13
|
||||
|
|
||||
LL | let _ = s[1..].splitn(2, '.').next()?;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try this: `s[1..].split_once('.').map_or(s[1..], |x| x.0)`
|
||||
|
|
||||
= note: `-D clippy::manual-split-once` implied by `-D warnings`
|
||||
|
||||
error: unnecessary use of `splitn`
|
||||
--> $DIR/ice-8250.rs:2:13
|
||||
|
|
||||
LL | let _ = s[1..].splitn(2, '.').next()?;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^ help: try this: `s[1..].split('.')`
|
||||
|
|
||||
= note: `-D clippy::needless-splitn` implied by `-D warnings`
|
||||
|
||||
error: aborting due to 2 previous errors
|
||||
|
Loading…
Reference in New Issue
Block a user