3

Uplift `clippy::undropped_manually_drops` lint by Urgau · Pull Request #111530 ·...

 1 year ago
source link: https://github.com/rust-lang/rust/pull/111530
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Conversation

Contributor

@Urgau Urgau

commented

May 13, 2023

edited

This PR aims at uplifting the clippy::undropped_manually_drops lint.

undropped_manually_drops

(warn-by-default)

The undropped_manually_drops lint check for calls to std::mem::drop with a value of std::mem::ManuallyDrop which doesn't drop.

Example

struct S;
drop(std::mem::ManuallyDrop::new(S));

Explanation

ManuallyDrop does not drop it's inner value so calling std::mem::drop will not drop the inner value of the ManuallyDrop either.


Mostly followed the instructions for uplifting an clippy lint described here: #99696 (review)

@rustbot label: +I-lang-nominated
r? compiler


For Clippy:

changelog: Moves: Uplifted clippy::undropped_manually_drops into rustc

rustbot

added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

labels

May 13, 2023

Collaborator

Some changes occurred in src/tools/clippy

cc @rust-lang/clippy

rustbot

added the I-lang-nominated Indicates that an issue has been nominated for discussion during a lang team meeting. label

May 13, 2023

This comment has been minimized.

Collaborator

Hey! It looks like you've submitted a new PR for the library teams!

If this PR contains changes to any rust-lang/rust public library APIs then please comment with @rustbot label +T-libs-api -T-libs to tag it appropriately. If this PR contains changes to any unstable APIs please edit the PR description to add a link to the relevant API Change Proposal or create one if you haven't already. If you're unsure where your change falls no worries, just leave it as is and the reviewer will take a look and make a decision to forward on if necessary.

Examples of T-libs-api changes:

  • Stabilizing library features
  • Introducing insta-stable changes such as new implementations of existing stable traits on existing stable types
  • Introducing new or changing existing unstable library APIs (excluding permanently unstable features / features without a tracking issue)
  • Changing public documentation in ways that create new stability guarantees
  • Changing observable runtime behavior of library APIs

Contributor

ManuallyDrop doesn't not drop it's inner value

I think this part of the description is incorrect? Should it be "ManuallyDrop does not drop its inner value ..."?

Urgau reacted with thumbs up emoji

This comment was marked as outdated.

tmandry

added T-lang Relevant to the language team, which will review and decide on the PR/issue.

and removed T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

labels

May 16, 2023

Contributor

@rfcbot fcp merge

rfcbot

commented

May 16, 2023

edited by scottmcm

Team member @tmandry has proposed to merge this. The next step is review by the rest of the tagged team members:

No concerns currently listed.

Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up!

cc @rust-lang/lang-advisors: FCP proposed for lang, please feel free to register concerns.
See this document for info about what commands tagged team members can give me.

rfcbot

added proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off. disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it.

labels

May 16, 2023

Member

Didn't I see some lints go by recently that lint for using drop on things that are Copy? Might it make sense for this to be just part of that lint? Something like "promised it won't be needs_drop" instead of Copy?

Or if this is worth adding separately, maybe it would make sense to give it a higher default level as a "this is a specific mistake that people make" deny lint rather than a "this is useless" warn lint?

Contributor

Author

Didn't I see some lints go by recently that lint for using drop on things that are Copy?

Yes, it was #109732

Might it make sense for this to be just part of that lint? Something like "promised it won't be needs_drop" instead of Copy?

Well, it uplifted 4 lints, clippy::{drop,forget}_{ref,copy}. They could maybe be merged into one or two lint(s) if desired. I could see a reason for grouping by method but don't think this lint should be part of any of them since undropped_manually_drops detects obvious mistake while the other aren't not at the same level of "obvious mistake" (dropping a ref isn't wrong it's just useless, dropping a ManuallyDrop is useless but also surely a mistake).

Or if this is worth adding separately, maybe it would make sense to give it a higher default level as a "this is a specific mistake that people make" deny lint rather than a "this is useless" warn lint?

Yes, sure. My take on the default level was "does it cause UB? yes -> deny; no -> warn" but since this lint catch's a so obvious mistake that no-one would have ever wrote this intentionally, it could make sense to make it deny-by-default.

Member

Yeah, we have a couple of other deny-by-default lints like that. For example,

  • unused binding from match pattern: warning
  • unused binding from match pattern, but spelled exactly the same as a variant of the type it's matching against: deny (and suggest replacing A => with Foo::A => )

When there's a super-specific suggestion we can give (here to use ManuallyDrop::drop instead of mem::drop) because it's a known pattern, I think deny-by-default makes good sense.

Urgau reacted with thumbs up emoji

rfcbot

added final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised.

and removed proposed-final-comment-period Proposed to merge/close by relevant subteam, see T-<team> label. Will enter FCP once signed off.

labels

May 16, 2023

bellThis is now entering its final comment period, as per the review above. bell

Contributor

Author

Yeah, we have a couple of other deny-by-default lints like that.

When there's a super-specific suggestion we can give (here to use ManuallyDrop::drop instead of mem::drop) because it's a known pattern, I think deny-by-default makes good sense.

Make sense, I will change it to deny-by-default.

(btw, the suggestion here is ManuallyDrop::into_inner not ManuallyDrop::drop as the lint only triggers on owned ManuallyDrop, the ref cases and handled by the other lints)

Contributor

umbrella The latest upstream changes (presumably #111799) made this pull request unmergeable. Please resolve the merge conflicts.

Contributor

@rustbot label -I-lang-nominated

rustbot

removed the I-lang-nominated Indicates that an issue has been nominated for discussion during a lang team meeting. label

May 23, 2023

rfcbot

added finished-final-comment-period The final comment period is finished for this PR / Issue. to-announce Announce this issue on triage meeting

and removed final-comment-period In the final comment period and will be merged soon unless new substantive objections are raised.

labels

May 26, 2023

Contributor

Author

r? compiler

Member

@rustbot delegate+
@rustbot author

(delegate still works even though bors didn't comment, just use @bors r=compiler-errors when this is ready to go)

rustbot

added S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author.

and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties.

labels

Jun 5, 2023

Contributor

Author

(delegate still works even though bors didn't comment, just use @bors r=compiler-errors when this is ready to go)

unfortunately it won't work since you have used @rustbot and not @bors (unless I'm missing something)

@rustbot ready

rustbot

added S-waiting-on-review Status: Awaiting review from the assignee but also interested parties.

and removed S-waiting-on-author Status: This is awaiting some action (such as code changes or more information) from the author.

labels

Jun 8, 2023

@compiler-errors I think it was supposed to be done using bors and not rustbot. ;)

@bors r=compiler-errors

compiler-errors reacted with laugh emoji

Contributor

pushpin Commit d9d1c76 has been approved by compiler-errors

It is now in the queue for this repository.

bors

added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion.

and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties.

labels

Jun 9, 2023

Contributor

hourglass Testing commit d9d1c76 with merge d7ad9d9...

Member

Contributor

sunny Test successful - checks-actions
Approved by: compiler-errors
Pushing d7ad9d9 to master...

Urgau reacted with hooray emoji

bors

added the merged-by-bors This PR was explicitly merged by bors label

Jun 9, 2023

bors

merged commit d7ad9d9 into

rust-lang:master

Jun 9, 2023

12 checks passed

rustbot

added this to the 1.72.0 milestone

Jun 9, 2023

Collaborator

Finished benchmarking commit (d7ad9d9): comparison URL.

Overall result: x regressions - ACTION NEEDED

Next Steps: If you can justify the regressions found in this perf run, please indicate this with @rustbot label: +perf-regression-triaged along with sufficient written justification. If you cannot justify the regressions please open an issue or create a new PR that fixes the regressions, add a comment linking to the newly created issue or PR, and then add the perf-regression-triaged label to this PR.

@rustbot label: +perf-regression
cc @rust-lang/wg-compiler-performance

Instruction count

This is a highly reliable metric that was used to determine the overall result at the top of this comment.

mean range count
Regressions x
(primary)
0.7% [0.6%, 0.7%] 3
Regressions x
(secondary)
0.5% [0.3%, 0.6%] 8
Improvements white_check_mark
(primary)
- - 0
Improvements white_check_mark
(secondary)
- - 0
All xwhite_check_mark (primary) 0.7% [0.6%, 0.7%] 3

Max RSS (memory usage)

Results

Cycles

Results

Binary size

This benchmark run did not return any relevant results for this metric.

Bootstrap: 647.29s -> 649.935s (0.41%)

rustbot

added the perf-regression Performance regressions label

Jun 9, 2023

Member

  • only primary benchmark to regress was helloworld (3 incr check variants), and not by all that much (relatively speaking)
  • secondary regressions were solely to unify-linearly, await-call-tree, token-stream-stress.
  • impact seems acceptable (one expects new lint to add some amount of extra work, and I wouldn't be surprised if this is actually noise,. given Misc HIR typeck type mismatch tweaks #112116 above).
  • marking as triaged.

@rustbot label: +perf-regression-triaged

rustbot

added the perf-regression-triaged The performance regression has been triaged. label

Jun 13, 2023

apiraino

removed the to-announce Announce this issue on triage meeting label

Jun 15, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

compiler-errors

compiler-errors left review comments
Labels
disposition-merge This issue / PR is in PFCP or FCP with a disposition to merge it. finished-final-comment-period The final comment period is finished for this PR / Issue. merged-by-bors This PR was explicitly merged by bors perf-regression Performance regressions perf-regression-triaged The performance regression has been triaged. S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-lang Relevant to the language team, which will review and decide on the PR/issue.
Projects

None yet

Milestone

1.72.0

Development

Successfully merging this pull request may close these issues.

None yet

15 participants

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK