Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Implement a lint for implicit autoref of raw pointer dereference - take 2#123239

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
bors merged 4 commits intorust-lang:masterfromUrgau:dangerous_implicit_autorefs
Apr 28, 2025

Conversation

@Urgau
Copy link
Member

@UrgauUrgau commentedMar 30, 2024
edited
Loading

t-lang nomination comment

This PR aims at implementing a lint for implicit autoref of raw pointer dereference, it is based on#103735 with suggestion and improvements from#103735 (comment).

The goal is to catch cases like this, where the user probably doesn't realise it just created a reference.

pubstructTest{data:[u8],}pubfntest_len(t:*constTest) ->usize{unsafe{(*t).data.len()}// this calls <[T]>::len(&self)}

Since#103735 already went 2 times through T-lang, where they T-lang ended-up asking for a more restricted version (which is what this PR does), I would prefer this PR to be reviewed first before re-nominating it for T-lang.


Compared to the PR it is as based on, this PR adds 3 restrictions on the outer most expression, which must either be:

  1. A deref followed by any non-deref place projection (that intermediate deref will typically be auto-inserted)
  2. A method call annotated with#[rustc_no_implicit_refs].
  3. A deref followed by aaddr_of! oraddr_of_mut!. See bottom of post for details.

There are several points that are not 100% clear to me when implementing the modifications:

  • "4. Any number of automatically inserted deref/derefmut calls." I as never able to trigger this. Am I missing something? Fixed
  • Are "index" and "field" enough?

cc@JakobDegen@WaffleLapkin
r?@RalfJung

try-job: dist-various-1
try-job: dist-various-2

ptrca reacted with heart emoji
@rustbotrustbot added S-waiting-on-reviewStatus: Awaiting review from the assignee but also interested parties. T-compilerRelevant to the compiler team, which will review and decide on the PR/issue. T-libsRelevant to the library team, which will review and decide on the PR/issue. labelsMar 30, 2024
@rustbot
Copy link
Collaborator

The Miri subtree was changed

cc @rust-lang/miri

@RalfJung
Copy link
Member

Sorry, I can't take on more reviews currently.
r? compiler
(or feel free to pick someone specific who's suited)

Urgau reacted with thumbs up emoji

@rustbotrustbot assignedfmease and unassignedRalfJungMar 30, 2024
@rust-log-analyzer

This comment has been minimized.

@rust-log-analyzer

This comment has been minimized.

@bors

This comment was marked as outdated.

@UrgauUrgauforce-pushed thedangerous_implicit_autorefs branch from2b3fe45 to57f6416CompareMay 14, 2024 17:22
@rust-log-analyzer

This comment has been minimized.

@UrgauUrgauforce-pushed thedangerous_implicit_autorefs branch from57f6416 to824c1f5CompareMay 14, 2024 18:04
@bors

This comment was marked as outdated.

@UrgauUrgauforce-pushed thedangerous_implicit_autorefs branch from824c1f5 toc2d6e62CompareMay 23, 2024 18:49
@bors

This comment was marked as outdated.

@Dylan-DPC
Copy link
Member

@Urgau if you can rebase the latest conflicts we can push this forward and maybe get it reviewed by another reviewer

@Dylan-DPCDylan-DPC added S-waiting-on-authorStatus: This is awaiting some action (such as code changes or more information) from the author. and removed S-waiting-on-reviewStatus: Awaiting review from the assignee but also interested parties. labelsAug 12, 2024
@UrgauUrgauforce-pushed thedangerous_implicit_autorefs branch fromc2d6e62 to78288afCompareAugust 12, 2024 15:49
@Urgau
Copy link
MemberAuthor

@Dylan-DPC rebased.

@rustbot review

Dylan-DPC reacted with thumbs up emoji

@rustbotrustbot added S-waiting-on-reviewStatus: Awaiting review from the assignee but also interested parties. and removed S-waiting-on-authorStatus: This is awaiting some action (such as code changes or more information) from the author. labelsAug 12, 2024
@UrgauUrgauforce-pushed thedangerous_implicit_autorefs branch from78288af tod060615CompareOctober 9, 2024 13:58
@rust-log-analyzer

This comment has been minimized.

@rustbotrustbot added the perf-regressionPerformance regression. labelApr 28, 2025
bors added a commit to rust-lang-ci/rust that referenced this pull requestApr 28, 2025
perf: delay checking of `#[rustc_no_implicit_autorefs]` in autoref lintTry to address the regression seen inrust-lang#123239 (comment) by delaying the checking of `#[rustc_no_implicit_autorefs]` on method call.
github-actionsbot pushed a commit to rust-lang/miri that referenced this pull requestApr 29, 2025
…mann,traviscrossImplement a lint for implicit autoref of raw pointer dereference - take 2*[t-lang nomination comment](rust-lang/rust#123239 (comment)This PR aims at implementing a lint for implicit autoref of raw pointer dereference, it is based on #103735 with suggestion and improvements fromrust-lang/rust#103735 (comment).The goal is to catch cases like this, where the user probably doesn't realise it just created a reference.```rustpub struct Test {    data: [u8],}pub fn test_len(t: *const Test) -> usize {    unsafe { (*t).data.len() }  // this calls <[T]>::len(&self)}```Since #103735 already went 2 times through T-lang, where they T-lang ended-up asking for a more restricted version (which is what this PR does), I would prefer this PR to be reviewed first before re-nominating it for T-lang.----Compared to the PR it is as based on, this PR adds 3 restrictions on the outer most expression, which must either be:   1. A deref followed by any non-deref place projection (that intermediate deref will typically be auto-inserted)   2. A method call annotated with `#[rustc_no_implicit_refs]`.   3. A deref followed by a `addr_of!` or `addr_of_mut!`. See bottom of post for details.There are several points that are not 100% clear to me when implementing the modifications: - ~~"4. Any number of automatically inserted deref/derefmut calls." I as never able to trigger this. Am I missing something?~~ Fixed - Are "index" and "field" enough?----cc `@JakobDegen` `@WaffleLapkin`r? `@RalfJung`try-job: dist-various-1try-job: dist-various-2
@rylev
Copy link
Member

The perf regression is reversed in#140406

@rustbot label: +perf-regression-triaged

@rustbotrustbot added the perf-regression-triagedThe performance regression has been triaged. labelApr 29, 2025
github-merge-queuebot pushed a commit to bevyengine/bevy that referenced this pull requestApr 30, 2025
# Objective- new nightly lint make CI fail## Solution- Follow the lint:rust-lang/rust#123239
github-actionsbot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull requestMay 1, 2025
…mann,traviscrossImplement a lint for implicit autoref of raw pointer dereference - take 2*[t-lang nomination comment](rust-lang/rust#123239 (comment)This PR aims at implementing a lint for implicit autoref of raw pointer dereference, it is based on #103735 with suggestion and improvements fromrust-lang/rust#103735 (comment).The goal is to catch cases like this, where the user probably doesn't realise it just created a reference.```rustpub struct Test {    data: [u8],}pub fn test_len(t: *const Test) -> usize {    unsafe { (*t).data.len() }  // this calls <[T]>::len(&self)}```Since #103735 already went 2 times through T-lang, where they T-lang ended-up asking for a more restricted version (which is what this PR does), I would prefer this PR to be reviewed first before re-nominating it for T-lang.----Compared to the PR it is as based on, this PR adds 3 restrictions on the outer most expression, which must either be:   1. A deref followed by any non-deref place projection (that intermediate deref will typically be auto-inserted)   2. A method call annotated with `#[rustc_no_implicit_refs]`.   3. A deref followed by a `addr_of!` or `addr_of_mut!`. See bottom of post for details.There are several points that are not 100% clear to me when implementing the modifications: - ~~"4. Any number of automatically inserted deref/derefmut calls." I as never able to trigger this. Am I missing something?~~ Fixed - Are "index" and "field" enough?----cc `@JakobDegen` `@WaffleLapkin`r? `@RalfJung`try-job: dist-various-1try-job: dist-various-2
VlaDexa added a commit to VlaDexa/rust that referenced this pull requestMay 2, 2025
perf: delay checking of `#[rustc_no_implicit_autorefs]` in autoref lintTry to address the regression seen inrust-lang#123239 (comment) by delaying the checking of `#[rustc_no_implicit_autorefs]` on method call.
bors added a commit to rust-lang-ci/rust that referenced this pull requestMay 2, 2025
perf: delay checking of `#[rustc_no_implicit_autorefs]` in autoref lintTry to address the regression seen inrust-lang#123239 (comment) by delaying the checking of `#[rustc_no_implicit_autorefs]` on method call.
github-actionsbot pushed a commit to rust-lang/miri that referenced this pull requestMay 3, 2025
perf: delay checking of `#[rustc_no_implicit_autorefs]` in autoref lintTry to address the regression seen inrust-lang/rust#123239 (comment) by delaying the checking of `#[rustc_no_implicit_autorefs]` on method call.
github-actionsbot pushed a commit to rust-lang/rustc-dev-guide that referenced this pull requestMay 5, 2025
perf: delay checking of `#[rustc_no_implicit_autorefs]` in autoref lintTry to address the regression seen inrust-lang/rust#123239 (comment) by delaying the checking of `#[rustc_no_implicit_autorefs]` on method call.
lnicola pushed a commit to lnicola/rust-analyzer that referenced this pull requestMay 5, 2025
perf: delay checking of `#[rustc_no_implicit_autorefs]` in autoref lintTry to address the regression seen inrust-lang/rust#123239 (comment) by delaying the checking of `#[rustc_no_implicit_autorefs]` on method call.
github-actionsbot pushed a commit to model-checking/verify-rust-std that referenced this pull requestMay 9, 2025
…=jdonszelmann,traviscrossImplement a lint for implicit autoref of raw pointer dereference - take 2*[t-lang nomination comment](rust-lang#123239 (comment)This PR aims at implementing a lint for implicit autoref of raw pointer dereference, it is based onrust-lang#103735 with suggestion and improvements fromrust-lang#103735 (comment).The goal is to catch cases like this, where the user probably doesn't realise it just created a reference.```rustpub struct Test {    data: [u8],}pub fn test_len(t: *const Test) -> usize {    unsafe { (*t).data.len() }  // this calls <[T]>::len(&self)}```Sincerust-lang#103735 already went 2 times through T-lang, where they T-lang ended-up asking for a more restricted version (which is what this PR does), I would prefer this PR to be reviewed first before re-nominating it for T-lang.----Compared to the PR it is as based on, this PR adds 3 restrictions on the outer most expression, which must either be:   1. A deref followed by any non-deref place projection (that intermediate deref will typically be auto-inserted)   2. A method call annotated with `#[rustc_no_implicit_refs]`.   3. A deref followed by a `addr_of!` or `addr_of_mut!`. See bottom of post for details.There are several points that are not 100% clear to me when implementing the modifications: - ~~"4. Any number of automatically inserted deref/derefmut calls." I as never able to trigger this. Am I missing something?~~ Fixed - Are "index" and "field" enough?----cc `@JakobDegen` `@WaffleLapkin`r? `@RalfJung`try-job: dist-various-1try-job: dist-various-2
andrewzhurov pushed a commit to andrewzhurov/bevy that referenced this pull requestMay 17, 2025
# Objective- new nightly lint make CI fail## Solution- Follow the lint:rust-lang/rust#123239
@jieyouxujieyouxu added the L-dangerous_implicit_autorefsLint: dangerous_implicit_autorefs labelMay 30, 2025
@apirainoapiraino removed the to-announceAnnounce this issue on triage meeting labelJun 5, 2025
GuillaumeGomez added a commit to GuillaumeGomez/rust that referenced this pull requestJun 7, 2025
…refs, r=traviscrossMake the `dangerous_implicit_autorefs` lint deny-by-defaultI intended for the `dangerous_implicit_autorefs` lint to be deny-by-default, the [T-lang nomination comment](rust-lang#123239 (comment)) even clearly mentioned deny-by-default, but somehow I and other missed that it is only warn-by-default.I think the lint should still be deny-by-default as the implicit aliasing requirements can be quite dangerous.In any-case, opening this PR for T-lang awareness.`@rustbot` label +I-lang-nominated +T-langr? `@traviscross`
rust-timer added a commit that referenced this pull requestJun 8, 2025
Rollup merge of#141661 - Urgau:deny-dangerous_implicit_autorefs, r=traviscrossMake the `dangerous_implicit_autorefs` lint deny-by-defaultI intended for the `dangerous_implicit_autorefs` lint to be deny-by-default, the [T-lang nomination comment](#123239 (comment)) even clearly mentioned deny-by-default, but somehow I and other missed that it is only warn-by-default.I think the lint should still be deny-by-default as the implicit aliasing requirements can be quite dangerous.In any-case, opening this PR for T-lang awareness.`@rustbot` label +I-lang-nominated +T-langr? `@traviscross`
lnicola pushed a commit to lnicola/rust-analyzer that referenced this pull requestJun 9, 2025
…raviscrossMake the `dangerous_implicit_autorefs` lint deny-by-defaultI intended for the `dangerous_implicit_autorefs` lint to be deny-by-default, the [T-lang nomination comment](rust-lang/rust#123239 (comment)) even clearly mentioned deny-by-default, but somehow I and other missed that it is only warn-by-default.I think the lint should still be deny-by-default as the implicit aliasing requirements can be quite dangerous.In any-case, opening this PR for T-lang awareness.`@rustbot` label +I-lang-nominated +T-langr? `@traviscross`
@jieyouxujieyouxu mentioned this pull requestJun 22, 2025
github-merge-queuebot pushed a commit to getsentry/relay that referenced this pull requestJun 27, 2025
wip-sync pushed a commit to NetBSD/pkgsrc-wip that referenced this pull requestJun 29, 2025
Pkgsrc changes: * Adjust patches to adapt to upstream changes and new versions. * associated checksumsUpstream changes relative to 1.87.0:Version 1.88.0 (2025-06-26)==========================Language--------- [Stabilize `#![feature(let_chains)]` in the 2024 edition.]  (rust-lang/rust#132833)  This feature allows `&&`-chaining `let` statements inside `if`  and `while`, allowing intermixture with boolean expressions. The  patterns inside the `let` sub-expressions can be irrefutable or  refutable.- [Stabilize `#![feature(naked_functions)]`.]  (rust-lang/rust#134213)  Naked functions allow writing functions with no compiler-generated  epilogue and prologue, allowing full control over the generated  assembly for a particular function.- [Stabilize `#![feature(cfg_boolean_literals)]`.]  (rust-lang/rust#138632)  This allows using boolean literals as `cfg` predicates, e.g.  `#[cfg(true)]` and `#[cfg(false)]`.- [Fully de-stabilize the `#[bench]` attribute]  (rust-lang/rust#134273). Usage of `#[bench]`  without `#![feature(custom_test_frameworks)]` already triggered  a deny-by-default future-incompatibility lint since Rust 1.77,  but will now become a hard error.- [Add warn-by-default `dangerous_implicit_autorefs` lint against  implicit autoref of raw pointer dereference.]  (rust-lang/rust#123239) The  lint [will be bumped to deny-by-default]  (rust-lang/rust#141661) in the next  version of Rust.- [Add `invalid_null_arguments` lint to prevent invalid usage of  null pointers.] (rust-lang/rust#119220)  This lint is uplifted from `clippy::invalid_null_ptr_usage`.- [Change trait impl candidate preference for builtin impls and  trivial where-clauses.] (rust-lang/rust#138176)- [Check types of generic const parameter defaults]  (rust-lang/rust#139646)Compiler--------- [Stabilize `-Cdwarf-version` for selecting the version of DWARF  debug information to generate.]  (rust-lang/rust#136926)Platform Support----------------- [Demote `i686-pc-windows-gnu` to Tier 2.]  (https://blog.rust-lang.org/2025/05/26/demoting-i686-pc-windows-gnu/)Refer to Rust's [platform support page][platform-support-doc]for more information on Rust's tiered platform support.[platform-support-doc]:https://doc.rust-lang.org/rustc/platform-support.htmlLibraries---------- [Remove backticks from `#[should_panic]` test failure message.]  (rust-lang/rust#136160)- [Guarantee that `[T; N]::from_fn` is generated in order of  increasing indices.] (rust-lang/rust#139099),  for those passing it a stateful closure.- [The libtest flag `--nocapture` is deprecated in favor of the  more consistent `--no-capture` flag.]  (rust-lang/rust#139224)- [Guarantee that `{float}::NAN` is a quiet NaN.]  (rust-lang/rust#139483)Stabilized APIs---------------- [`Cell::update`]  (https://doc.rust-lang.org/stable/std/cell/struct.Cell.html#method.update)- [`impl Default for *const T`]  (https://doc.rust-lang.org/nightly/std/primitive.pointer.html#impl-Default-for-*const+T)- [`impl Default for *mut T`]  (https://doc.rust-lang.org/nightly/std/primitive.pointer.html#impl-Default-for-*mut+T)- [`HashMap::extract_if`]  (https://doc.rust-lang.org/stable/std/collections/struct.HashMap.html#method.extract_if)- [`HashSet::extract_if`]  (https://doc.rust-lang.org/stable/std/collections/struct.HashSet.html#method.extract_if)- [`proc_macro::Span::line`]  (https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.line)- [`proc_macro::Span::column`]  (https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.column)- [`proc_macro::Span::start`]  (https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.start)- [`proc_macro::Span::end`]  (https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.end)- [`proc_macro::Span::file`]  (https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.file)- [`proc_macro::Span::local_file`]  (https://doc.rust-lang.org/stable/proc_macro/struct.Span.html#method.local_file)These previously stable APIs are now stable in const contexts:- [`NonNull<T>::replace`]  (https://doc.rust-lang.org/stable/std/ptr/struct.NonNull.html#method.replace)- [`<*mut T>::replace`]  (https://doc.rust-lang.org/stable/std/primitive.pointer.html#method.replace)- [`std::ptr::swap_nonoverlapping`]  (rust-lang/rust#137280)- [`Cell::{replace, get, get_mut, from_mut, as_slice_of_cells}`]  (rust-lang/rust#137928)Cargo------ [Stabilize automatic garbage collection.]  (rust-lang/cargo#14287)- [use `zlib-rs` for gzip compression in rust code]  (rust-lang/cargo#15417)Rustdoc------ [Doctests can be ignored based on target names using `ignore-*` attributes.]  (rust-lang/rust#137096)- [Stabilize the `--test-runtool` and `--test-runtool-arg` CLI  options to specify a program (like qemu) and its arguments to run  a doctest.] (rust-lang/rust#137096)Compatibility Notes-------------------- [Finish changing the internal representation of pasted tokens]  (rust-lang/rust#124141). Certain invalid  declarative macros that were previously accepted in obscure  circumstances are now correctly rejected by the compiler. Use of  a `tt` fragment specifier can often fix these macros.- [Fully de-stabilize the `#[bench]` attribute]  (rust-lang/rust#134273). Usage of `#[bench]`  without `#![feature(custom_test_frameworks)]` already triggered  a deny-by-default future-incompatibility lint since Rust 1.77,  but will now become a hard error.- [Fix borrow checking some always-true patterns.]  (rust-lang/rust#139042) The borrow checker  was overly permissive in some cases, allowing programs that  shouldn't have compiled.- [Update the minimum external LLVM to 19.]  (rust-lang/rust#139275)- [Make it a hard error to use a vector type with a non-Rust ABI  without enabling the required target feature.]  (rust-lang/rust#139309)
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

@wesleywiserwesleywiserwesleywiser left review comments

@tmandrytmandrytmandry left review comments

@fmeasefmeasefmease left review comments

@jdonszelmannjdonszelmannjdonszelmann requested changes

@jieyouxujieyouxujieyouxu left review comments

@traviscrosstraviscrosstraviscross approved these changes

Assignees

@jdonszelmannjdonszelmann

Labels

A-attributesArea: Attributes (`#[…]`, `#![…]`)CI-spurious-fail-mingwCI spurious failure: target env mingwCI-spurious-fail-rust-lld-crashCI spurious failure: `rust-lld` crashing / SIGSEGV / 0xc0000374 heap corruptiondisposition-mergeThis issue / PR is in PFCP or FCP with a disposition to merge it.finished-final-comment-periodThe final comment period is finished for this PR / Issue.L-dangerous_implicit_autorefsLint: dangerous_implicit_autorefsmerged-by-borsThis PR was explicitly merged by bors.O-SGXTarget: SGXperf-regressionPerformance regression.perf-regression-triagedThe performance regression has been triaged.S-waiting-on-borsStatus: Waiting on bors to run and complete tests. Bors will change the label on completion.T-langRelevant to the language team

Projects

None yet

Milestone

1.88.0

Development

Successfully merging this pull request may close these issues.

19 participants

@Urgau@rustbot@RalfJung@rust-log-analyzer@bors@Dylan-DPC@jdonszelmann@WaffleLapkin@scottmcm@rfcbot@traviscross@matthiaskrgr@rust-timer@rylev@wesleywiser@tmandry@fmease@jieyouxu@apiraino

[8]ページ先頭

©2009-2025 Movatter.jp