-
Notifications
You must be signed in to change notification settings - Fork 12.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rollup of 5 pull requests #122667
Rollup of 5 pull requests #122667
Commits on Mar 17, 2024
-
Configuration menu - View commit details
-
Copy full SHA for 96e3c2c - Browse repository at this point
Copy the full SHA 96e3c2cView commit details -
Configuration menu - View commit details
-
Copy full SHA for 758f642 - Browse repository at this point
Copy the full SHA 758f642View commit details -
Configuration menu - View commit details
-
Copy full SHA for 6828f0c - Browse repository at this point
Copy the full SHA 6828f0cView commit details -
Configuration menu - View commit details
-
Copy full SHA for 872781b - Browse repository at this point
Copy the full SHA 872781bView commit details -
Configuration menu - View commit details
-
Copy full SHA for 23a4ad1 - Browse repository at this point
Copy the full SHA 23a4ad1View commit details -
Detect when move of
!Copy
value occurs withinloop
and should lik……ely not be cloned When encountering a move error on a value within a loop of any kind, identify if the moved value belongs to a call expression that should not be cloned and avoid the semantically incorrect suggestion. Also try to suggest moving the call expression outside of the loop instead. ``` error[E0382]: use of moved value: `vec` --> $DIR/recreating-value-in-loop-condition.rs:6:33 | LL | let vec = vec!["one", "two", "three"]; | --- move occurs because `vec` has type `Vec<&str>`, which does not implement the `Copy` trait LL | while let Some(item) = iter(vec).next() { | ----------------------------^^^-------- | | | | | value moved here, in previous iteration of loop | inside of this loop | note: consider changing this parameter type in function `iter` to borrow instead if owning the value isn't necessary --> $DIR/recreating-value-in-loop-condition.rs:1:17 | LL | fn iter<T>(vec: Vec<T>) -> impl Iterator<Item = T> { | ---- ^^^^^^ this parameter takes ownership of the value | | | in this function help: consider moving the expression out of the loop so it is only moved once | LL ~ let mut value = iter(vec); LL ~ while let Some(item) = value.next() { | ``` We use the presence of a `break` in the loop that would be affected by the moved value as a heuristic for "shouldn't be cloned". Fix rust-lang#121466.
Configuration menu - View commit details
-
Copy full SHA for 14473ad - Browse repository at this point
Copy the full SHA 14473adView commit details -
Point at
continue
andbreak
that might be in the wrong placeSometimes move errors are because of a misplaced `continue`, but we didn't surface that anywhere. Now when there are more than one set of nested loops we show them out and point at the `continue` and `break` expressions within that might need to go elsewhere. ``` error[E0382]: use of moved value: `foo` --> $DIR/nested-loop-moved-value-wrong-continue.rs:46:18 | LL | for foo in foos { | --- | | | this reinitialization might get skipped | move occurs because `foo` has type `String`, which does not implement the `Copy` trait ... LL | for bar in &bars { | ---------------- inside of this loop ... LL | baz.push(foo); | --- value moved here, in previous iteration of loop ... LL | qux.push(foo); | ^^^ value used here after move | note: verify that your loop breaking logic is correct --> $DIR/nested-loop-moved-value-wrong-continue.rs:41:17 | LL | for foo in foos { | --------------- ... LL | for bar in &bars { | ---------------- ... LL | continue; | ^^^^^^^^ this `continue` advances the loop at line 33 help: consider moving the expression out of the loop so it is only moved once | LL ~ let mut value = baz.push(foo); LL ~ for bar in &bars { LL | ... LL | if foo == *bar { LL ~ value; | help: consider cloning the value if the performance cost is acceptable | LL | baz.push(foo.clone()); | ++++++++ ``` Fix rust-lang#92531.
Configuration menu - View commit details
-
Copy full SHA for 78d29ad - Browse repository at this point
Copy the full SHA 78d29adView commit details -
Configuration menu - View commit details
-
Copy full SHA for f216bac - Browse repository at this point
Copy the full SHA f216bacView commit details -
Configuration menu - View commit details
-
Copy full SHA for da2364d - Browse repository at this point
Copy the full SHA da2364dView commit details -
Configuration menu - View commit details
-
Copy full SHA for 3b237d7 - Browse repository at this point
Copy the full SHA 3b237d7View commit details -
Rollup merge of rust-lang#121652 - estebank:move-in-loop-break-condit…
…ion, r=Nadrieril Detect when move of !Copy value occurs within loop and should likely not be cloned When encountering a move error on a value within a loop of any kind, identify if the moved value belongs to a call expression that should not be cloned and avoid the semantically incorrect suggestion. Also try to suggest moving the call expression outside of the loop instead. ``` error[E0382]: use of moved value: `vec` --> $DIR/recreating-value-in-loop-condition.rs:6:33 | LL | let vec = vec!["one", "two", "three"]; | --- move occurs because `vec` has type `Vec<&str>`, which does not implement the `Copy` trait LL | while let Some(item) = iter(vec).next() { | ----------------------------^^^-------- | | | | | value moved here, in previous iteration of loop | inside of this loop | note: consider changing this parameter type in function `iter` to borrow instead if owning the value isn't necessary --> $DIR/recreating-value-in-loop-condition.rs:1:17 | LL | fn iter<T>(vec: Vec<T>) -> impl Iterator<Item = T> { | ---- ^^^^^^ this parameter takes ownership of the value | | | in this function help: consider moving the expression out of the loop so it is only moved once | LL ~ let mut value = iter(vec); LL ~ while let Some(item) = value.next() { | ``` We use the presence of a `break` in the loop that would be affected by the moved value as a heuristic for "shouldn't be cloned". Fix rust-lang#121466. --- *Point at continue and break that might be in the wrong place* Sometimes move errors are because of a misplaced `continue`, but we didn't surface that anywhere. Now when there are more than one set of nested loops we show them out and point at the `continue` and `break` expressions within that might need to go elsewhere. ``` error[E0382]: use of moved value: `foo` --> $DIR/nested-loop-moved-value-wrong-continue.rs:46:18 | LL | for foo in foos { | --- | | | this reinitialization might get skipped | move occurs because `foo` has type `String`, which does not implement the `Copy` trait ... LL | for bar in &bars { | ---------------- inside of this loop ... LL | baz.push(foo); | --- value moved here, in previous iteration of loop ... LL | qux.push(foo); | ^^^ value used here after move | note: verify that your loop breaking logic is correct --> $DIR/nested-loop-moved-value-wrong-continue.rs:41:17 | LL | for foo in foos { | --------------- ... LL | for bar in &bars { | ---------------- ... LL | continue; | ^^^^^^^^ this `continue` advances the loop at line 33 help: consider moving the expression out of the loop so it is only moved once | LL ~ let mut value = baz.push(foo); LL ~ for bar in &bars { LL | ... LL | if foo == *bar { LL ~ value; | help: consider cloning the value if the performance cost is acceptable | LL | baz.push(foo.clone()); | ++++++++ ``` Fix rust-lang#92531.
Configuration menu - View commit details
-
Copy full SHA for 7970566 - Browse repository at this point
Copy the full SHA 7970566View commit details -
Rollup merge of rust-lang#122639 - omahs:patch-2, r=estebank
Fix typos Fix typos
Configuration menu - View commit details
-
Copy full SHA for 8697d8f - Browse repository at this point
Copy the full SHA 8697d8fView commit details -
Rollup merge of rust-lang#122645 - saethlin:portable-mir-opt-tests, r…
…=Nadrieril Remove some only- clauses from mir-opt tests Derived from rust-lang#122295 Many of these tests were originally codegen tests, and MIR is more trivially portable than LLVM IR. We simply don't need to restrict the platform in most cases. r? Nadrieril
Configuration menu - View commit details
-
Copy full SHA for 36006b2 - Browse repository at this point
Copy the full SHA 36006b2View commit details -
Rollup merge of rust-lang#122654 - RalfJung:interpret-comment, r=matt…
…hiaskrgr interpret/memory: explain why we use == on bool This came up in rust-lang#122636.
Configuration menu - View commit details
-
Copy full SHA for 1139bc5 - Browse repository at this point
Copy the full SHA 1139bc5View commit details -
Rollup merge of rust-lang#122656 - RalfJung:simplify-cfg, r=compiler-…
…errors simplify_cfg: rename some passes so that they make more sense I was extremely confused by `SimplifyCfg::ElaborateDrops`, since it runs way later than drop elaboration. It is used e.g. in `mir-opt/retag.rs` even though that pass doesn't care about drop elaboration at all. "Early opt" is also very confusing since that makes it sounds like it runs early during optimizations, i.e. on runtime MIR, but actually it runs way before that. So I decided to rename - early-opt -> post-analysis - elaborate-drops -> pre-optimizations I am open to other suggestions.
Configuration menu - View commit details
-
Copy full SHA for a6e0fb4 - Browse repository at this point
Copy the full SHA a6e0fb4View commit details