rust/library/std/src
bors a932eb36f8 Auto merge of #123239 - Urgau:dangerous_implicit_autorefs, r=jdonszelmann,traviscross
Implement a lint for implicit autoref of raw pointer dereference - take 2

*[t-lang nomination comment](https://github.com/rust-lang/rust/pull/123239#issuecomment-2727551097)*

This PR aims at implementing a lint for implicit autoref of raw pointer dereference, it is based on #103735 with suggestion and improvements from https://github.com/rust-lang/rust/pull/103735#issuecomment-1370420305.

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

```rust
pub 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-1
try-job: dist-various-2
2025-04-28 08:25:23 +00:00
..
backtrace remove redundant imports 2023-12-10 10:56:22 +08:00
collections Rollup merge of #139307 - xizheyin:issue-139296, r=joboet 2025-04-24 08:12:56 +02:00
ffi Rollup merge of #137439 - clarfonthey:c-str-module, r=tgross35 2025-04-27 11:54:56 +02:00
fs Test windows file type equality 2025-03-18 16:46:56 +00:00
hash remove const_hash feature leftovers 2024-11-02 11:27:14 +01:00
io use generic Atomic type where possible 2025-04-27 02:18:08 +03:00
net ToSocketAddrs: fix typo 2025-04-04 14:47:04 +02:00
os use generic Atomic type where possible 2025-04-27 02:18:08 +03:00
prelude Deprecate the unstable concat_idents! 2025-04-24 22:14:23 +00:00
process std: Apply deprecated_safe_2024 2025-02-13 13:10:28 -08:00
sync use generic Atomic type where possible 2025-04-27 02:18:08 +03:00
sys Auto merge of #123239 - Urgau:dangerous_implicit_autorefs, r=jdonszelmann,traviscross 2025-04-28 08:25:23 +00:00
sys_common Move fs into sys 2025-03-08 16:22:37 -08:00
thread use generic Atomic type where possible 2025-04-27 02:18:08 +03:00
alloc.rs use generic Atomic type where possible 2025-04-27 02:18:08 +03:00
ascii.rs Reformat using the new identifier sorting from rustfmt 2024-09-22 19:11:29 -04:00
backtrace.rs use generic Atomic type where possible 2025-04-27 02:18:08 +03:00
bstr.rs Implement ByteStr and ByteString types 2025-01-11 06:35:21 +02:00
env.rs Move sys::pal::os::Env into sys::env 2025-04-21 20:56:43 -07:00
error.rs Move std::error unit tests to integration tests 2025-01-26 10:28:04 +00:00
f16.rs std: make cmath functions safe 2025-03-29 13:08:18 +01:00
f32.rs std: make cmath functions safe 2025-03-29 13:08:18 +01:00
f64.rs std: make cmath functions safe 2025-03-29 13:08:18 +01:00
f128.rs std: make cmath functions safe 2025-03-29 13:08:18 +01:00
fs.rs clarify std::fs::set_permissions symlink behavior 2025-04-08 15:07:08 -05:00
keyword_docs.rs Rollup merge of #140216 - t5kd:master, r=tgross35 2025-04-26 07:13:07 +02:00
lib.miri.rs add 'x.py miri', and make it work for 'library/{core,alloc,std}' 2024-04-03 20:27:20 +02:00
lib.rs Auto merge of #136316 - GrigorenkoPV:generic_atomic, r=Mark-Simulacrum 2025-04-28 05:12:59 +00:00
macros.rs fix doc path in std::fmt macro 2025-02-25 09:08:22 +05:30
num.rs Move std::num unit tests to integration tests 2025-01-26 10:28:04 +00:00
panic.rs use generic Atomic type where possible 2025-04-27 02:18:08 +03:00
panicking.rs use generic Atomic type where possible 2025-04-27 02:18:08 +03:00
pat.rs Add pattern types to parser 2024-04-08 11:57:17 +00:00
path.rs Validate extension in PathBuf::add_extension 2025-04-22 05:34:25 -07:00
process.rs Rollup merge of #139554 - lolbinarycat:std-output-exit_ok, r=tgross35 2025-04-15 15:47:26 +10:00
random.rs Unify cygwin & horizon random impl 2025-03-10 21:23:32 +08:00
rt.rs rtprintpanic: clarify that the error is aborting the process 2025-04-18 15:02:22 +02:00
test_helpers.rs std: get rid of sys_common::io 2025-02-07 16:54:07 +01:00
time.rs Be more specific about the error in the SystemTime example 2025-04-17 11:57:28 -05:00