Fix hang in vec_init_then_push
This commit is contained in:
parent
7babd1b099
commit
15859323ea
3 changed files with 15 additions and 2 deletions
|
|
@ -86,7 +86,7 @@ impl VecPushSearcher {
|
||||||
},
|
},
|
||||||
ExprKind::Unary(UnOp::Deref, _) | ExprKind::Index(..) if !needs_mut => {
|
ExprKind::Unary(UnOp::Deref, _) | ExprKind::Index(..) if !needs_mut => {
|
||||||
let mut last_place = parent;
|
let mut last_place = parent;
|
||||||
while let Some(parent) = get_parent_expr(cx, parent) {
|
while let Some(parent) = get_parent_expr(cx, last_place) {
|
||||||
if matches!(parent.kind, ExprKind::Unary(UnOp::Deref, _) | ExprKind::Field(..))
|
if matches!(parent.kind, ExprKind::Unary(UnOp::Deref, _) | ExprKind::Field(..))
|
||||||
|| matches!(parent.kind, ExprKind::Index(e, _) if e.hir_id == last_place.hir_id)
|
|| matches!(parent.kind, ExprKind::Index(e, _) if e.hir_id == last_place.hir_id)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -104,3 +104,9 @@ fn _cond_push_with_large_start(x: bool) -> Vec<u32> {
|
||||||
|
|
||||||
v2
|
v2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn f() {
|
||||||
|
let mut v = Vec::new();
|
||||||
|
v.push((0i32, 0i32));
|
||||||
|
let y = v[0].0.abs();
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -62,5 +62,12 @@ LL | | v2.push(1);
|
||||||
LL | | v2.push(0);
|
LL | | v2.push(0);
|
||||||
| |_______________^ help: consider using the `vec![]` macro: `let mut v2 = vec![..];`
|
| |_______________^ help: consider using the `vec![]` macro: `let mut v2 = vec![..];`
|
||||||
|
|
||||||
error: aborting due to 7 previous errors
|
error: calls to `push` immediately after creation
|
||||||
|
--> $DIR/vec_init_then_push.rs:109:5
|
||||||
|
|
|
||||||
|
LL | / let mut v = Vec::new();
|
||||||
|
LL | | v.push((0i32, 0i32));
|
||||||
|
| |_________________________^ help: consider using the `vec![]` macro: `let v = vec![..];`
|
||||||
|
|
||||||
|
error: aborting due to 8 previous errors
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue