Commit Graph

17090 Commits

Author SHA1 Message Date
Matthias Krüger
fbed195b4d
Rollup merge of #133226 - compiler-errors:opt-in-pointer-like, r=lcnr
Make `PointerLike` opt-in instead of built-in

The `PointerLike` trait currently is a built-in trait that computes the layout of the type. This is a bit problematic, because types implement this trait automatically. Since this can be broken due to semver-compatible changes to a type's layout, this is undesirable. Also, calling `layout_of` in the trait system also causes cycles.

This PR makes the trait implemented via regular impls, and adds additional validation on top to make sure that those impls are valid. This could eventually be `derive()`d for custom smart pointers, and we can trust *that* as a semver promise rather than risking library authors accidentally breaking it.

On the other hand, we may never expose `PointerLike`, but at least now the implementation doesn't invoke `layout_of` which could cause ICEs or cause cycles.

Right now for a `PointerLike` impl to be valid, it must be an ADT that is `repr(transparent)` and the non-1zst field needs to implement `PointerLike`. There are also some primitive impls for `&T`/ `&mut T`/`*const T`/`*mut T`/`Box<T>`.
2024-11-20 20:10:13 +01:00
Matthias Krüger
71d3c7790f
Rollup merge of #130800 - bjoernager:const-mut-cursor, r=joshtriplett
Mark `get_mut` and `set_position` in `std::io::Cursor` as const.

Relevant tracking issue: #130801

The methods `get_mut` and `set_position` can trivially be marked as const due to #57349 being stabilised.
2024-11-20 20:10:12 +01:00
Matthias Krüger
0576cc987b
Rollup merge of #129838 - Ayush1325:uefi-process-args, r=joboet
uefi: process: Add args support

- Wrap all args with quotes.
- Escape ^ and " inside quotes using ^.
- Doing reverse of arg parsing: d571ae851d/library/std/src/sys/pal/uefi/args.rs (L81)

 r​? joboet
2024-11-20 20:10:11 +01:00
Michael Goulet
228068bc6e Make PointerLike opt-in as a trait 2024-11-20 16:36:12 +00:00
George Bateman
5777c73438 Stabilize const_pin_2 2024-11-20 07:54:12 -05:00
Jacob Pratt
25dc4d0394
Rollup merge of #132732 - gavincrawford:as_ptr_attribute, r=Urgau
Use attributes for `dangling_pointers_from_temporaries` lint

Checking for dangling pointers by function name isn't ideal, and leaves out certain pointer-returning methods that don't follow the `as_ptr` naming convention. Using an attribute for this lint cleans things up and allows more thorough coverage of other methods, such as `UnsafeCell::get()`.
2024-11-20 01:54:24 -05:00
Matthias Krüger
d5dca43df6
Rollup merge of #133183 - n0toose:improve-remove-dir-docs, r=joboet
Mention std::fs::remove_dir_all in std::fs::remove_dir
2024-11-19 22:24:45 +01:00
Matthias Krüger
6c127f3ffd
Rollup merge of #125405 - m-ou-se:thread-add-spawn-hook, r=WaffleLapkin
Add std:🧵:add_spawn_hook.

Implementation of https://github.com/rust-lang/rfcs/pull/3642
2024-11-19 22:24:44 +01:00
Matthias Krüger
001f98ad80
Rollup merge of #123947 - zopsicle:vec_deque-Iter-as_slices, r=Amanieu
Add vec_deque::Iter::as_slices and friends

Add the following methods, that work similarly to VecDeque::as_slices:

 - alloc::collections::vec_deque::Iter::as_slices
 - alloc::collections::vec_deque::IterMut::into_slices
 - alloc::collections::vec_deque::IterMut::as_slices
 - alloc::collections::vec_deque::IterMut::as_mut_slices

Obtaining slices from a VecDeque iterator was not previously possible.
2024-11-19 22:24:43 +01:00
Mara Bos
691796be03 Update doc comments for spawn hook. 2024-11-19 18:55:52 +01:00
Mara Bos
b96f023dbd Address review comments.
Co-authored-by: waffle <waffle.lapkin@gmail.com>
2024-11-19 18:55:52 +01:00
Mara Bos
38b9a448c9 Fix tracking issue. 2024-11-19 18:54:21 +01:00
Mara Bos
24fec0d896 Add tracking issue. 2024-11-19 18:54:21 +01:00
Mara Bos
5a80b48fe1 Use Send + Sync for spawn hooks. 2024-11-19 18:54:20 +01:00
Mara Bos
f2bf9e198e Add thread Builder::no_hooks(). 2024-11-19 18:54:20 +01:00
Mara Bos
947354fbec Update thread spawn hooks.
1. Make the effect thread local.
2. Don't return a io::Result from hooks.
2024-11-19 18:54:20 +01:00
Mara Bos
ef9055f3ee Use add_spawn_hook for libtest's output capturing. 2024-11-19 18:54:20 +01:00
Mara Bos
7ac4c04731 Add std:🧵:add_spawn_hook. 2024-11-19 18:54:20 +01:00
gavincrawford
01fd384d58
Correct comments concerning updated dangling pointer lint 2024-11-19 10:05:24 -07:00
bors
78993684f2 Auto merge of #133205 - matthiaskrgr:rollup-xhhhp5u, r=matthiaskrgr
Rollup of 4 pull requests

Successful merges:

 - #131081 (Use `ConstArgKind::Path` for all single-segment paths, not just params under `min_generic_const_args`)
 - #132577 (Report the `unexpected_cfgs` lint in external macros)
 - #133023 (Merge `-Zhir-stats` into `-Zinput-stats`)
 - #133200 (ignore an occasionally-failing test in Miri)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-11-19 16:31:58 +00:00
Matthias Krüger
9aac15d736
Rollup merge of #133200 - RalfJung:miri-rwlock-test, r=tgross35
ignore an occasionally-failing test in Miri

This is like https://github.com/rust-lang/rust/pull/128640, the test [sometimes](https://github.com/rust-lang/rust/pull/133189) fails due to https://github.com/rust-lang/rust/issues/121950.
2024-11-19 09:19:21 +01:00
Ralf Jung
7931a8ddef ignore an occasionally-failing test in Miri 2024-11-19 08:03:16 +01:00
León Orell Valerian Liehr
17ffefcf00
Rollup merge of #133182 - RalfJung:const-panic-inline, r=tgross35
const_panic: inline in bootstrap builds to avoid f16/f128 crashes

This should fix https://github.com/rust-lang/rust/issues/133177. ``@uweigand`` could you test that?
2024-11-19 04:01:30 +01:00
León Orell Valerian Liehr
22265415c4
Rollup merge of #132758 - nnethercote:improve-get_key_value-docs, r=cuviper
Improve `{BTreeMap,HashMap}::get_key_value` docs.

They are unusual methods. The docs don't really describe the cases when they might be useful (as opposed to just `get`), and the examples don't demonstrate the interesting cases at all.

This commit improves the docs and the examples.
2024-11-19 04:01:28 +01:00
Panagiotis "Ivory" Vasilopoulos
7bffa31042 Mention std::fs::remove_dir_all in std::fs::remove_dir 2024-11-18 23:34:59 +01:00
Urgau
58664de837 Bump stdarch to the latest master 2024-11-18 18:52:27 +01:00
Ralf Jung
31f5c3ba69 const_panic: inline in bootstrap builds to avoid f16/f128 crashes 2024-11-18 18:17:02 +01:00
bors
c602e9aeaa Auto merge of #133160 - jhpratt:rollup-wzj9q15, r=jhpratt
Rollup of 4 pull requests

Successful merges:

 - #132934 (Overhaul the `-l` option parser (for linking to native libs))
 - #133142 (rename rustc_const_stable_intrinsic -> rustc_intrinsic_const_stable_indirect)
 - #133145 (Document alternatives to `static mut`)
 - #133158 (Subtree update of `rust-analyzer`)

r? `@ghost`
`@rustbot` modify labels: rollup
2024-11-18 12:46:07 +00:00
Jacob Pratt
19c145d816
Rollup merge of #133145 - kornelski:static-mutex, r=traviscross
Document alternatives to `static mut`

In #133143 I've noticed alternatives to `static mut` aren't documented anywhere.
2024-11-18 02:24:36 -05:00
bors
e83c45a98b Auto merge of #128219 - connortsui20:rwlock-downgrade, r=tgross35
Rwlock downgrade

Tracking Issue: #128203

This PR adds a `downgrade` method for `RwLock` / `RwLockWriteGuard` on all currently supported platforms.

Outstanding questions:
- [x] ~~Does the `futex.rs` change affect performance at all? It doesn't seem like it will but we can't be certain until we bench it...~~
- [x] ~~Should the SOLID platform implementation [be ported over](https://github.com/rust-lang/rust/pull/128219#discussion_r1693470090) to the `queue.rs` implementation to allow it to support downgrades?~~
2024-11-18 07:24:12 +00:00
Ralf Jung
9d4b1b2db4 rename rustc_const_stable_intrinsic -> rustc_intrinsic_const_stable_indirect 2024-11-18 07:47:44 +01:00
Nicholas Nethercote
2765432d32 Improve {BTreeMap,HashMap}::get_key_value docs.
They are unusual methods. The docs don't really describe the cases when
they might be useful (as opposed to just `get`), and the examples don't
demonstrate the interesting cases at all.

This commit improves the docs and the examples.
2024-11-18 16:53:12 +11:00
Kornel
8b43a7ee5d
Document alternatives to static mut 2024-11-18 00:34:06 +00:00
bors
3fb7e441ae Auto merge of #120370 - x17jiri:likely_unlikely_fix, r=saethlin
Likely unlikely fix

RFC 1131 ( https://github.com/rust-lang/rust/issues/26179 ) added likely/unlikely intrinsics, but they have been broken for a while: https://github.com/rust-lang/rust/issues/96276 , https://github.com/rust-lang/rust/issues/96275 , https://github.com/rust-lang/rust/issues/88767 . This PR tries to fix them.

Changes:
- added a new `cold_path()` intrinsic
- `likely()` and `unlikely()` changed to regular functions implemented using `cold_path()`
2024-11-17 23:57:53 +00:00
Jiri Bobek
777003ae9f Likely unlikely fix 2024-11-17 21:49:10 +01:00
许杰友 Jieyou Xu (Joe)
defc8666a3
Rollup merge of #133126 - ohno418:fix-String-doc, r=jhpratt
alloc: fix `String`'s doc

Just a minor fix for `String` struct.
2024-11-17 23:56:11 +08:00
许杰友 Jieyou Xu (Joe)
af1c8be400
Rollup merge of #133116 - RalfJung:const-null-ptr, r=dtolnay
stabilize const_ptr_is_null

FCP passed in https://github.com/rust-lang/rust/issues/74939.

The second commit cleans up const stability around UB checks a bit, now that everything they need (except for `const_eval_select`) is stable.

Fixes https://github.com/rust-lang/rust/issues/74939
2024-11-17 23:56:10 +08:00
Yutaro Ohno
ec65dfc45e alloc: fix String's doc 2024-11-17 15:23:14 +09:00
Ralf Jung
543627ddbe clean up const stability around UB checks 2024-11-16 22:50:22 +01:00
Ralf Jung
5eef5ee38a stabilize const_ptr_is_null 2024-11-16 22:50:22 +01:00
Matthias Krüger
fb5bd7ffcc
Rollup merge of #132449 - RalfJung:is_val_statically_known, r=compiler-errors
mark is_val_statically_known intrinsic as stably const-callable

The intrinsic doesn't actually "do" anything in terms of language semantics, and we are already using it in stable const fn. So let's just properly mark it as stably const-callable to avoid needing `rustc_allow_const_fn_unstable` (and thus reducing noise and keeping the remaining `rustc_allow_const_fn_unstable` as a more clear signal).

Cc `@rust-lang/lang` usually you have to approve exposing intrinsics in const, but this intrinsic is basically just a compiler implementation detail. So FCP doesn't seem necessary.
Cc `@rust-lang/wg-const-eval`
2024-11-16 21:05:44 +01:00
Matthias Krüger
07b033649e
Rollup merge of #131717 - tgross35:stabilize-const_atomic_from_ptr, r=RalfJung
Stabilize `const_atomic_from_ptr`

The API is already stable since https://github.com/rust-lang/rust/pull/115719, but const stability was blocked on `const_mut_refs`. Since that was recently stabilized, const stabilize the following:

```rust
// core::atomic

impl AtomicBool { pub const unsafe fn from_ptr<'a>(ptr: *mut bool) -> &'a AtomicBool; }

impl<T> AtomicPtr<T> { pub const unsafe fn from_ptr<'a>(ptr: *mut *mut T) -> &'a AtomicPtr<T>; }

impl AtomicU8    { pub const unsafe fn from_ptr<'a>(ptr: *mut u8)    -> &'a AtomicU8;    }
impl AtomicU16   { pub const unsafe fn from_ptr<'a>(ptr: *mut u16)   -> &'a AtomicU16;   }
impl AtomicU32   { pub const unsafe fn from_ptr<'a>(ptr: *mut u32)   -> &'a AtomicU32;   }
impl AtomicU64   { pub const unsafe fn from_ptr<'a>(ptr: *mut u64)   -> &'a AtomicU64;   }
impl AtomicUsize { pub const unsafe fn from_ptr<'a>(ptr: *mut usize) -> &'a AtomicUsize; }

impl AtomicI8    { pub const unsafe fn from_ptr<'a>(ptr: *mut i8)    -> &'a AtomicI8;    }
impl AtomicI16   { pub const unsafe fn from_ptr<'a>(ptr: *mut i16)   -> &'a AtomicI16;   }
impl AtomicI32   { pub const unsafe fn from_ptr<'a>(ptr: *mut i32)   -> &'a AtomicI32;   }
impl AtomicI64   { pub const unsafe fn from_ptr<'a>(ptr: *mut i64)   -> &'a AtomicI64;   }
impl AtomicIsize { pub const unsafe fn from_ptr<'a>(ptr: *mut isize) -> &'a AtomicIsize; }
```
2024-11-16 21:05:43 +01:00
Connor Tsui
fc52cdd9a8 reduce threads in downgrade test 2024-11-16 12:31:14 -05:00
Connor Tsui
782b07e1ff fix DOWNGRADED bit unpreserved
Co-authored-by: Jonas Böttiger <jonasboettiger@icloud.com>
2024-11-16 12:31:14 -05:00
Connor Tsui
84fd95cbed fix memory ordering bug + bad test
This commit fixes a memory ordering bug in the futex implementation
(`Relaxed` -> `Release` on `downgrade`).

This commit also removes a badly written test that deadlocked and
replaces it with a more reasonable test based on an already-tested
`downgrade` test from the parking-lot crate.
2024-11-16 12:31:14 -05:00
Connor Tsui
3d191b50d2 add safety comments for queue implementation 2024-11-16 12:31:13 -05:00
Connor Tsui
26b5a1485e add downgrade to queue implementation
This commit adds the `downgrade` method onto the inner `RwLock` queue
implementation.

There are also a few other style patches included in this commit.

Co-authored-by: Jonas Böttiger <jonasboettiger@icloud.com>
2024-11-16 12:31:13 -05:00
Connor Tsui
31e35c2131 modify queue implementation documentation
This commit only has documentation changes and a few things moved around
the file. The very few code changes are cosmetic: changes like turning a
`match` statement into an `if let` statement or reducing indentation for
long if statements.

This commit also adds several safety comments on top of `unsafe` blocks
that might not be immediately obvious to a first-time reader.

Code "changes" are in:
- `add_backlinks_and_find_tail`
- `lock_contended`

A majority of the changes are just expanding the comments from 80
columns to 100 columns.
2024-11-16 12:31:13 -05:00
Connor Tsui
fa9f04af5d add downgrade to futex implementation 2024-11-16 12:31:13 -05:00
Connor Tsui
3336ae0838 add simple downgrade implementations 2024-11-16 12:31:13 -05:00