Jieyou Xu
4aeb297064
Revert "unicode_data refactors RUST-147622"
...
This PR reverts RUST-147622 for several reasons:
1. The RUST-147622 PR would format the generated core library code using
an arbitrary `rustfmt` picked up from `PATH`, which will cause
hard-to-debug failures when the `rustfmt` used to format the
generated unicode data code versus the `rustfmt` used to format the
in-tree library code.
2. Previously, the `unicode-table-generator` tests were not run under CI
as part of `coretests`, and since for `x86_64-gnu-aux` job we run
library `coretests` with `miri`, the generated tests unfortunately
caused an unacceptably large Merge CI time regression from ~2 hours
to ~3.5 hours, making it the slowest Merge CI job (and thus the new
bottleneck).
3. This PR also has an unintended effect of causing a diagnostic
regression (RUST-148387), though that's mostly an edge case not
properly handled by `rustc` diagnostics.
Given that these are three distinct causes with non-trivial fixes, I'm
proposing to revert this PR to return us to baseline. This is not
prejudice against relanding the changes with these issues addressed, but
to alleviate time pressure to address these non-trivial issues.
2025-11-03 19:53:11 +08:00
Matthias Krüger
01ab3e369b
Rollup merge of #146260 - Qelxiros:146179-sliceindex-wrappers, r=jhpratt
...
add SliceIndex wrapper types Last and Clamp<Idx>
Tracking issue: rust-lang/rust#146179
2025-11-03 06:54:35 +01:00
Matthias Krüger
75fbbd32f0
Rollup merge of #147622 - Kmeakin:km/unicode-data/refactors, r=joboet
...
`unicode_data` refactors
Minor refactors to `unicode_data` that occured to me while trying to reduce the size of the tables. Splitting into a separate PR. NFC
2025-10-31 18:41:48 +01:00
Karl Meakin
0e6131c9aa
refactor: make unicode_data tests normal tests
...
Instead of generating a standalone executable to test `unicode_data`,
generate normal tests in `coretests`. This ensures tests are always
generated, and will be run as part of the normal testsuite.
Also change the generated tests to loop over lookup tables, rather than
generating a separate `assert_eq!()` statement for every codepoint. The
old approach produced a massive (20,000 lines plus) file which took
minutes to compile!
2025-10-31 14:12:17 +00:00
ltdk
6f649e4e1a
const select_unpredictable
2025-10-26 21:33:00 -04:00
ltdk
97b7170eef
const Cell methods
2025-10-16 16:09:31 -04:00
Matthias Krüger
252974a717
Rollup merge of #146187 - clarfonthey:const-drop-in-place, r=oli-obk
...
Unstably constify `ptr::drop_in_place` and related methods
Tracking: rust-lang/rust#109342
Supercedes: rust-lang/rust#145725
Makes methods const:
* `core::ptr::drop_in_place`
* `core::mem::ManuallyDrop::drop`
* `core::mem::MaybeUninit::assume_init_drop`
* `<[core::mem::MaybeUninit<_>]>::assume_init_drop`
* `<*mut _>::drop_in_place`
* `core::ptr::NonNull::drop_in_place`
2025-10-14 19:47:28 +02:00
Jeremy Smart
a00f24116e
unstably constify float mul_add methods
...
Co-authored-by: Ralf Jung <post@ralfj.de >
2025-09-24 15:21:31 -04:00
Jeremy Smart
78d8ce7301
add SliceIndex wrapper types Last and Clamp<Idx>
2025-09-15 15:25:12 -04:00
Matthias Krüger
9070e95dda
Rollup merge of #146478 - ferrocene:pvdrz/improve-fmt-coverage, r=Mark-Simulacrum
...
Improve `core::fmt` coverage
This PR improves the `core::fmt` coverage by adding new tests to `coretests`
2025-09-15 06:03:46 +02:00
Jana Dönszelmann
7928be014c
Rollup merge of #146477 - ferrocene:pvdrz/improve-char-coverage, r=Noratrieb
...
Improve `core::char` coverage
This PR improves the `core::char` coverage by adding new tests to `coretests`
r? ``@workingjubilee``
2025-09-13 02:40:45 +02:00
Christian Poveda
2e652d7d13
Improve core::fmt coverage
2025-09-12 11:34:54 -05:00
Christian Poveda
51e3b6238d
Improve core::char coverage
2025-09-12 11:22:07 -05:00
Evgenii Zheltonozhskii
ff9b1c1d28
Constify Eq, Ord, PartialOrd
2025-09-12 12:39:31 +03:00
Christian Poveda
5f2b04652f
Improve core::ops coverage
2025-09-10 16:32:04 -05:00
ltdk
07d3e923ac
Unstably constify ptr::drop_in_place and related methods
2025-09-05 17:28:22 -04:00
Jacob Pratt
00d5dc5c9d
Rollup merge of #145690 - sayantn:integer-funnel-shift, r=tgross35
...
Implement Integer funnel shifts
Tracking issue: rust-lang/rust#145686
ACP: https://github.com/rust-lang/libs-team/issues/642
This implements funnel shifts on primitive integer types. Implements this for cg_llvm, with a fallback impl for everything else
Thanks `@folkertdev` for the fixes and tests
cc `@rust-lang/libs-api`
2025-09-04 01:43:21 -04:00
Stuart Cook
732802c207
Rollup merge of #143725 - kennytm:peekable_next_if_map, r=jhpratt
...
core: add Peekable::next_if_map
Implementation for rust-lang/rust#143702
2025-09-04 10:01:51 +10:00
Stuart Cook
f4b946a147
Rollup merge of #145279 - clarfonthey:const-convert-initial, r=tgross35
...
Constify conversion traits (part 1)
This is the first part of rust-lang/rust#144289 being split into smaller pieces. It adds/moves constness of several traits under the `const_convert` feature:
* `From`
* `Into`
* `TryFrom`
* `TryInto`
* `FromStr`
* `AsRef`
* `AsMut`
* `Borrow`
* `BorrowMut`
* `Deref`
* `DerefMut`
There are a few methods that are intrinsically tied to these traits which I've included in the feature. Particularly, those which are wrappers over `AsRef`:
* `ByteStr::new` (unstable under `bstr` feature)
* `OsStr::new`
* `Path::new`
Those which directly use `Into`:
* `Result::into_ok`
* `Result::into_err`
And those which use `Deref` and `DerefMut`:
* `Pin::as_ref`
* `Pin::as_mut`
* `Pin::as_deref_mut`
* `Option::as_deref`
* `Option::as_deref_mut`
* `Result::as_deref`
* `Result::as_deref_mut`
(note: the `Option` and `Result` methods were suggested by ``@npmccallum`` initially as rust-lang/rust#146101 )
The parts which are missing from this PR are:
* Anything that involves heap-allocated types
* Making any method const than the ones listed above
* Anything that could rely on the above, *or* could rely on system-specific code for `OsStr` or `Path` (note: this mostly makes these methods useless since `str` doesn't implement `AsRef<OsStr>` yet, but it's better to track the method for now and add impls later, IMHO)
r? ``@tgross35`` (who mostly already reviewed this)
2025-09-03 23:08:06 +10:00
sayantn
62b4347e80
Add funnel_sh{l,r} functions and intrinsics
...
- Add a fallback implementation for the intrinsics
- Add LLVM backend support for funnel shifts
Co-Authored-By: folkertdev <folkert@folkertdev.nl >
2025-09-03 14:13:24 +05:30
ltdk
1c64d3e6d1
Constify conversion traits
2025-09-01 21:38:26 -04:00
Stuart Cook
f655e6a863
Rollup merge of #145969 - actuallylost:duration-from-nanos-128, r=tgross35
...
Add Duration::from_nanos_u128
Feature Gate: `#![feature(duration_from_nanos_u128)]`
ACP: https://github.com/rust-lang/libs-team/issues/567
Tracking issue: https://github.com/rust-lang/rust/issues/139201
Recreated from https://github.com/rust-lang/rust/pull/139243
2025-08-30 20:29:08 +10:00
Trevor Gross
ed9e767c01
Rollup merge of #145467 - Kivooeo:stabilize-strict_provenance_atomic_ptr, r=scottmcm
...
Stabilize `strict_provenance_atomic_ptr` feature
This closes [tracking issue](https://github.com/rust-lang/rust/issues/99108 ) and stabilises `AtomicPtr::{fetch_ptr_add, fetch_ptr_sub, fetch_byte_add, fetch_byte_sub, fetch_or, fetch_and, fetch_xor}`
---
EDIT: FCP completed at https://github.com/rust-lang/rust/issues/99108#issuecomment-3168260347
2025-08-29 19:33:02 -05:00
actuallylost
8134a10ec7
Add Duration::from_nanos_u128
...
Tracking issue: RUST-139201
Co-authored-by: omanirudh <omanirudh2014@gmail.com >
2025-08-30 01:38:14 +03:00
Matthias Krüger
1e90922864
Rollup merge of #144274 - Qelxiros:option-reduce, r=tgross35
...
add Option::reduce
Tracking issue: rust-lang/rust#144273
2025-08-27 11:26:48 +02:00
ltdk
2914291e09
Move WTF-8 code from std to core/alloc
2025-08-20 20:31:33 -04:00
Jacob Pratt
5a0c9386a2
Rollup merge of #145381 - Gnurou:int_lowest_highest_one, r=jhpratt
...
Implement feature `int_lowest_highest_one` for integer and NonZero types
Tracking issue: rust-lang/rust#145203
Implement the accepted ACP rust-lang/rust#145203 for methods that find the index of the least significant (lowest) and most significant (highest) set bit in an integer for signed, unsigned, and NonZero types.
Also add unit tests for all these types.
2025-08-20 00:45:56 -04:00
Stuart Cook
027c7a5d85
Rollup merge of #141744 - GrigorenkoPV:ip_from, r=Amanieu
...
Stabilize `ip_from`
Tracking issue: rust-lang/rust#131360
Stabilizes and const-stabilizes the following APIs:
```rust
// core::net
impl Ipv4Addr {
pub const fn from_octets(octets: [u8; 4]) -> Ipv4Addr;
}
impl Ipv6Addr {
pub const fn from_octets(octets: [u8; 16]) -> Ipv6Addr;
pub const fn from_segments(segments: [u16; 8]) -> Ipv6Addr;
}
```
Closes rust-lang/rust#131360
```@rustbot``` label +needs-fcp
2025-08-19 14:18:15 +10:00
Alexandre Courbot
73d3d28bed
Implement feature int_lowest_highest_one for integer and NonZero types
...
Implement the accepted ACP for methods that find the index of the least
significant (lowest) and most significant (highest) set bit in an
integer for signed, unsigned, and NonZero types.
Also add unit tests for all these types.
2025-08-18 18:59:44 +09:00
Jacob Pratt
2776a21a4f
Rollup merge of #144963 - rossmacarthur-forks:stabilize-core-iter-chain, r=jhpratt
...
Stabilize `core::iter::chain`
Closes rust-lang/rust#125964
2025-08-15 18:13:29 -04:00
Kivooeo
b951b5dca1
stabilize strict provenance atomic ptr
2025-08-15 16:56:11 +00:00
Kivooeo
b5e2ba6775
Stabilize feature
2025-08-09 13:31:53 +05:00
Stuart Cook
bd7af8a336
Rollup merge of #145057 - ShoyuVanilla:const-trait-tests-cleanup, r=petrochenkov
...
Clean up some resolved test regressions of const trait removals in std
cc rust-lang/rust#143871
2025-08-08 12:52:59 +10:00
Shoyu Vanilla
34e5820e06
Clean up some resolved test regressions of const trait removals in std
2025-08-08 00:58:54 +09:00
Ross MacArthur
b038197b16
Stabilize core::iter::chain
2025-08-05 17:05:23 +02:00
Evgenii Zheltonozhskii
9377e0af52
Constify additional Result functions
2025-08-01 08:55:50 +03:00
Jeremy Smart
613080b5f1
add Option::reduce
2025-07-31 23:46:04 -04:00
Stuart Cook
ed7d6a941d
Rollup merge of #144236 - yoshuawuyts:drop-guard, r=Mark-Simulacrum
...
Add `core::mem::DropGuard`
## 1.0 Summary
This PR introduces a new type `core::mem::DropGuard` which wraps a value and runs a closure when the value is dropped.
```rust
use core::mem::DropGuard;
// Create a new guard around a string that will
// print its value when dropped.
let s = String::from("Chashu likes tuna");
let mut s = DropGuard::new(s, |s| println!("{s}"));
// Modify the string contained in the guard.
s.push_str("!!!");
// The guard will be dropped here, printing:
// "Chashu likes tuna!!!"
```
## 2.0 Motivation
A number of programming languages include constructs like `try..finally` or `defer` to run code as the last piece of a particular sequence, regardless of whether an error occurred. This is typically used to clean up resources, like closing files, freeing memory, or unlocking resources. In Rust we use the `Drop` trait instead, allowing us to [never having to manually close sockets](https://blog.skylight.io/rust-means-never-having-to-close-a-socket/ ).
While `Drop` (and RAII in general) has been working incredibly well for Rust in general, sometimes it can be a little verbose to setup. In particular when upholding invariants are local to functions, having a quick inline way to setup an `impl Drop` can be incredibly convenient. We can see this in use in the Rust stdlib, which has a number of private `DropGuard` impls used internally:
- [library/alloc/src/vec/drain.rs](https://github.com/rust-lang/rust/blob/9982d6462bedf1e793f7b2dbd655a4e57cdf67d4/library/alloc/src/vec/drain.rs#L177 )
- [library/alloc/src/boxed/thin.rs](https://github.com/rust-lang/rust/blob/9982d6462bedf1e793f7b2dbd655a4e57cdf67d4/library/alloc/src/boxed/thin.rs#L362 )
- [library/alloc/src/slice.rs](https://github.com/rust-lang/rust/blob/9982d6462bedf1e793f7b2dbd655a4e57cdf67d4/library/alloc/src/slice.rs#L413 )
- [library/alloc/src/collections/linked_list.rs](https://github.com/rust-lang/rust/blob/9982d6462bedf1e793f7b2dbd655a4e57cdf67d4/library/alloc/src/collections/linked_list.rs#L1135 )
- [library/alloc/src/collections/binary_heap/mod.rs](https://github.com/rust-lang/rust/blob/9982d6462bedf1e793f7b2dbd655a4e57cdf67d4/library/alloc/src/collections/binary_heap/mod.rs#L1816 )
- [library/alloc/src/collections/btree/map.rs](https://github.com/rust-lang/rust/blob/9982d6462bedf1e793f7b2dbd655a4e57cdf67d4/library/alloc/src/collections/btree/map.rs#L1715 )
- [library/alloc/src/collections/vec_deque/drain.rs](https://github.com/rust-lang/rust/blob/9982d6462bedf1e793f7b2dbd655a4e57cdf67d4/library/alloc/src/collections/vec_deque/drain.rs#L95 )
- [library/alloc/src/vec/into_iter.rs](https://github.com/rust-lang/rust/blob/9982d6462bedf1e793f7b2dbd655a4e57cdf67d4/library/alloc/src/vec/into_iter.rs#L488 )
- [library/std/src/os/windows/process.rs](https://github.com/rust-lang/rust/blob/9982d6462bedf1e793f7b2dbd655a4e57cdf67d4/library/std/src/os/windows/process.rs#L320 )
- [tests/ui/process/win-proc-thread-attributes.rs](https://github.com/rust-lang/rust/blob/9982d6462bedf1e793f7b2dbd655a4e57cdf67d4/tests/ui/process/win-proc-thread-attributes.rs#L17 )
## 3.0 Design
This PR implements what can be considered about the simplest possible design:
1. A single type `DropGuard` which takes both a generic type `T` and a closure `F`.
2. `Deref` + `DerefMut` impls to make it easy to work with the `T` in the guard.
3. An `impl Drop` on the guard which calls the closure `F` on drop.
4. An inherent `fn into_inner` which takes the type `T` out of the guard without calling the closure `F`.
Notably this design does not allow divergent behavior based on the type of drop that has occurred. The [`scopeguard` crate](https://docs.rs/scopeguard/latest/scopeguard/index.html ) includes additional `on_success` and `on_onwind` variants which can be used to branch on unwind behavior instead. However [in a lot of cases](https://github.com/rust-lang/rust/issues/143612#issuecomment-3053928328 ) this doesn’t seem necessary, and using the arm/disarm pattern seems to provide much the same functionality:
```rust
let guard = DropGuard::new((), |s| ...); // 1. Arm the guard
other_function(); // 2. Perform operations
guard.into_inner(); // 3. Disarm the guard
```
`DropGuard` combined with this pattern seems like it should cover the vast majority of use cases for quick, inline destructors. It certainly seems like it should cover all existing uses in the stdlib, as well as all existing uses in crates like [hashbrown](https://github.com/search?q=repo%3Arust-lang%2Fhashbrown%20guard&type=code ).
## 4.0 Acknowledgements
This implementation is based on the [mini-scopeguard crate](https://github.com/yoshuawuyts/mini-scopeguard ) which in turn is based on the [scopeguard crate](https://docs.rs/scopeguard ). The implementations only differ superficially; because of the nature of the problem there is only really one obvious way to structure the solution. And the scopeguard crate got that right!
## 5.0 Conclusion
This PR adds a new type `core::mem::DropGuard` to the stdlib which adds a small convenience helper to create inline destructors with. This would bring the majority of the functionality of the `scopeguard` crate into the stdlib, which is the [49th most downloaded crate](https://crates.io/crates?sort=downloads ) on crates.io (387 million downloads).
Given the actual implementation of `DropGuard` is only around 60 lines, it seems to hit that sweet spot of low-complexity / high-impact that makes for a particularly efficient stdlib addition. Which is why I’m putting this forward for consideration; thanks!
2025-07-29 16:16:41 +10:00
Yosh
68f08c5dd9
Add core::mem::DropGuard
...
Fix CI for drop_guard
fix CI
fix all tidy lints
fix tidy link
add first batch of feedback from review
Add second batch of feedback from review
add third batch of feedback from review
fix failing test
Update library/core/src/mem/drop_guard.rs
Co-authored-by: Ruby Lazuli <general@patchmixolydic.com >
fix doctests
Implement changes from T-Libs-API review
And start tracking based on the tracking issue.
fix tidy lint
2025-07-28 12:12:40 +02:00
Scott McMurray
173926da2b
Remove [T]::array_chunks(_mut)
2025-07-27 23:03:07 -07:00
Jonas Platte
0e30629600
Add regression test for matches! + non_exhaustive_omitted_patterns lint
2025-07-23 14:35:44 +02:00
Nurzhan Sakén
ca01e7de6f
Stabilize const_float_round_methods
2025-07-20 00:08:58 +04:00
Roger Curley
c5e67b48ef
Consolidate test_num tests
2025-07-11 10:31:25 -04:00
kennytm
2261154549
core: add Peekable::next_if_map
2025-07-10 20:44:59 +08:00
Jacob Pratt
e080bc8751
Rollup merge of #142749 - LimpSquid:bool_to_result, r=scottmcm
...
Add methods for converting bool to `Result<(), E>`
## Tracking Issue
https://github.com/rust-lang/rust/issues/142748
## ACP
https://github.com/rust-lang/libs-team/issues/606
2025-07-04 05:47:22 +02:00
bors
e61dd437f3
Auto merge of #143074 - compiler-errors:rollup-cv64hdh, r=compiler-errors
...
Rollup of 18 pull requests
Successful merges:
- rust-lang/rust#137843 (make RefCell unstably const)
- rust-lang/rust#140942 (const-eval: allow constants to refer to mutable/external memory, but reject such constants as patterns)
- rust-lang/rust#142549 (small iter.intersperse.fold() optimization)
- rust-lang/rust#142637 (Remove some glob imports from the type system)
- rust-lang/rust#142647 ([perf] Compute hard errors without diagnostics in impl_intersection_has_impossible_obligation)
- rust-lang/rust#142700 (Remove incorrect comments in `Weak`)
- rust-lang/rust#142927 (Add note to `find_const_ty_from_env`)
- rust-lang/rust#142967 (Fix RwLock::try_write documentation for WouldBlock condition)
- rust-lang/rust#142986 (Port `#[export_name]` to the new attribute parsing infrastructure)
- rust-lang/rust#143001 (Rename run always )
- rust-lang/rust#143010 (Update `browser-ui-test` version to `0.20.7`)
- rust-lang/rust#143015 (Add `sym::macro_pin` diagnostic item for `core::pin::pin!()`)
- rust-lang/rust#143033 (Expand const-stabilized API links in relnotes)
- rust-lang/rust#143041 (Remove cache for citool)
- rust-lang/rust#143056 (Move an ACE test out of the GCI directory)
- rust-lang/rust#143059 (Fix 1.88 relnotes)
- rust-lang/rust#143067 (Tracking issue number for `iter_macro`)
- rust-lang/rust#143073 (Fix some fixmes that were waiting for let chains)
Failed merges:
- rust-lang/rust#143020 (codegen_fn_attrs: make comment more precise)
r? `@ghost`
`@rustbot` modify labels: rollup
2025-06-27 00:44:20 +00:00
Daniel Bloom
1f1000f4b8
make RefCell unstably const
2025-06-25 17:06:49 -07:00
Folkert de Vries
1dfc8406dc
make tidy-alphabetical use a natural sort
2025-06-25 22:52:38 +02:00
LimpSquid
19352e9d93
Add methods for converting bool to Result<(), E>
2025-06-19 23:20:06 +02:00
Shun Sakai
199b808870
feat: Add bit_width for unsigned integer types
2025-06-11 11:15:37 +09:00