about summary refs log tree commit diff
path: root/library/core/src
AgeCommit message (Collapse)AuthorLines
2023-11-13Auto merge of #116866 - slanterns:inspect-stabilize, r=BurntSushibors-13/+4
Stabilize `result_option_inspect` This PR stabilizes `result_option_inspect`: ```rust // core::option impl Option<T> { pub fn inspect<F: FnOnce(&T)>(self, f: F) -> Self; } // core::result impl Result<T, E> { pub fn inspect<F: FnOnce(&T)>(self, f: F) -> Self; pub fn inspect_err<F: FnOnce(&E)>(self, f: F) -> Self; } ``` <br> Tracking issue: https://github.com/rust-lang/rust/issues/91345. Implementation PR: https://github.com/rust-lang/rust/pull/91346. Closes https://github.com/rust-lang/rust/issues/91345.
2023-11-12Reenable effects in libcoreDeadbeef-0/+1
2023-11-11Rename MaybeUninit::write_sliceKornel-13/+13
#79995
2023-11-11round to evenJames Dietz-6/+3
2023-11-11fix rounding issue with exponents in fmtJames Dietz-0/+8
2023-11-11Auto merge of #115694 - clarfonthey:std-hash-private, r=dtolnaybors-41/+19
Add `std::hash::{DefaultHasher, RandomState}` exports (needs FCP) This implements rust-lang/libs-team#267 to move the libstd hasher types to `std::hash` where they belong, instead of `std::collections::hash_map`. <details><summary>The below no longer applies, but is kept for clarity.</summary> This is a small refactor for #27242, which moves the definitions of `RandomState` and `DefaultHasher` into `std::hash`, but in a way that won't be noticed in the public API. I've opened rust-lang/libs-team#267 as a formal ACP to move these directly into the root of `std::hash`, but for now, they're at least separated out from the collections code in a way that will make moving that around easier. I decided to simply copy the rustdoc for `std::hash` from `core::hash` since I think it would be ideal for the two to diverge longer-term, especially if the ACP is accepted. However, I would be willing to factor them out into a common markdown document if that's preferred. </details>
2023-11-11clarify ABI compatibility of fn ptr types and ptr typesRalf Jung-9/+9
and add an and
2023-11-10add 'import functions' to the list of situations where ABI compatibility ↵Ralf Jung-5/+8
comes up
2023-11-10Auto merge of #117572 - RalfJung:addr_of, r=cuviperbors-6/+24
update and clarify addr_of docs This updates the docs to match https://github.com/rust-lang/reference/pull/1387. Cc `@rust-lang/opsem` `@chorman0773` not sure if you had anything else you wanted to say here, I'd be happy to get your feedback. :) Fixes https://github.com/rust-lang/rust/issues/114902, so Cc `@joshlf`
2023-11-10mention null explicitlyRalf Jung-2/+2
Co-authored-by: Josh Stone <cuviper@gmail.com>
2023-11-10Rollup merge of #117730 - jmillikin:fmt-debug-helper-fns, r=cuviperMatthias Krüger-13/+134
Closure-consuming helper functions for `fmt::Debug` helpers ACP: https://github.com/rust-lang/libs-team/issues/288 Tracking issue: https://github.com/rust-lang/rust/issues/117729
2023-11-10Rollup merge of #117039 - scottmcm:clarify-get-unchecked, r=cuviperMatthias Krüger-0/+10
Clarify UB in `get_unchecked(_mut)` Inspired by #116915, it was unclear to me what exactly "out-of-bounds index" means in `get_unchecked`. One could [potentially](https://rust.godbolt.org/z/hxM764orW) interpret it that `get_unchecked` is just another way to write `offset`, but I think `get_unchecked(len)` is supposed to be UB even though `.offet(len)` is well-defined (as is `.get_unchecked(..len)`), so write that more directly in the docs. **libs-api folks**: Can you confirm whether this is what you expect this to mean? And is the situation any different for `<*const [T]>::get_unchecked`?
2023-11-10Closure-consuming helper functions for `fmt::Debug` helpersJohn Millikin-13/+134
2023-11-09Rollup merge of #117694 - jmillikin:core-io-borrowed-buf, r=m-ou-seTakayuki Maeda-0/+309
Move `BorrowedBuf` and `BorrowedCursor` from `std:io` to `core::io` Tracking issue: https://github.com/rust-lang/rust/issues/117693 ACP: https://github.com/rust-lang/libs-team/issues/290
2023-11-09Rollup merge of #116762 - WaffleLapkin:fixup_fromptr_docs, r=RalfJungTakayuki Maeda-43/+81
Fixup `Atomic*::from_ptr` safety docs See https://github.com/rust-lang/rust/pull/115719#issuecomment-1762725010 cc ``@RalfJung``
2023-11-09Move `BorrowedBuf` and `BorrowedCursor` from `std:io` to `core::io`John Millikin-0/+309
Assigned new feature name `core_io_borrowed_buf` to distinguish from the `Read::read_buf` functionality in `std::io`.
2023-11-08Auto merge of #116930 - RalfJung:raw-ptr-match, r=davidtwcobors-0/+1
patterns: reject raw pointers that are not just integers Matching against `0 as *const i32` is fine, matching against `&42 as *const i32` is not. This extends the existing check against function pointers and wide pointers: we now uniformly reject all these pointer types during valtree construction, and then later lint because of that. See [here](https://github.com/rust-lang/rust/pull/116930#issuecomment-1784654073) for some more explanation and context. Also fixes https://github.com/rust-lang/rust/issues/116929. Cc `@oli-obk` `@lcnr`
2023-11-08Refactor `binary_search_by` to use conditional movesokaneco-9/+8
Refactor the if/else checking on cmp::Ordering variants to a "branchless" reassignment of left and right. This change results in fewer branches and instructions.
2023-11-07Fix addition formattingscottmcm-2/+2
2023-11-07Document how rust atomics work wrt mixed-sized and non-atomic accessesMaybe Waffle-43/+81
2023-11-07Stabilize `slice_group_by`Niklas Fiekas-52/+44
Renamed "group by" to "chunk by" a per #80552. Newly stable items: * `core::slice::ChunkBy` * `core::slice::ChunkByMut` * `[T]::chunk` * `[T]::chunk_by` Closes #80552.
2023-11-06Rollup merge of #117631 - smarnach:error-request-doc-fix, r=ChrisDentonMatthias Krüger-4/+4
Documentation cleanup for core::error::Request. This part of the documentation currently render like this: ![image](https://github.com/rust-lang/rust/assets/249196/b34cb907-4ce4-4e85-beca-510d8aa1fefb) The new version renders like this: ![image](https://github.com/rust-lang/rust/assets/249196/fe18398a-15fb-42a7-82a4-f1856d48bd79) Fixes: * Add missing closing back tick. * Remove spurious double back ticks. * Add missing newline to render bullet point correctly. * Fix grammar "there are methods calledrequest_ref and request_value are available" -> "there are methods calledrequest_ref and request_value". * Change "methods" to "functions", which seems more appropriate for free functions.
2023-11-06Auto merge of #116988 - RalfJung:null, r=WaffleLapkinbors-0/+10
document that the null pointer has the 0 address Fixes https://github.com/rust-lang/rust/issues/116895 Will need t-lang FCP, but I think this is fairly uncontroversial -- there's probably already tons of code out there that relies on this.
2023-11-06Documentation cleanup for core::error::Request.Sven Marnach-4/+4
2023-11-05Auto merge of #96979 - SabrinaJewson:waker-update, r=workingjubileebors-1/+14
Override `Waker::clone_from` to avoid cloning `Waker`s unnecessarily This would be very useful for futures — I think it’s pretty much always what they want to do instead of `*waker = cx.waker().clone()`. Tracking issue: https://github.com/rust-lang/rust/issues/98287 r? rust-lang/libs-api `@rustbot` label +T-libs-api -T-libs
2023-11-05Add `Duration::abs_diff`Ole Bertram-0/+21
2023-11-05Auto merge of #117179 - Voultapher:fix-useless-comp-in-partition-equal, ↵bors-3/+10
r=Mark-Simulacrum Avoid unnecessary comparison in partition_equal The branchy Hoare partition `partition_equal` as part of `slice::sort_unstable` has a bug that makes it perform a comparison of the last element twice. Measuring inputs with a Zipfian distribution with characterizing exponent s == 1.0, yields a ~0.05% reduction in the total number of comparisons performed.
2023-11-05Auto merge of #117537 - GKFX:offset-of-enum-feature, r=cjgillotbors-0/+1
Feature gate enums in offset_of As requested at https://github.com/rust-lang/rust/issues/106655#issuecomment-1790815262, put enums in offset_of behind their own feature gate. `@rustbot` label F-offset_of
2023-11-05Rollup merge of #117596 - thomcc:core_macro_diag_items, r=NilstriebMatthias Krüger-0/+3
Add diagnostic items for a few of core's builtin macros Specifically, `env`, `option_env`, and `include`. There are a number of reasons why people might want to look at these in lints (For example, to ensure that things behave consistently, detect things that might make builds less reproducible, etc). Concretely, in PL/Rust (well, `plrustc`) we have lints that forbid these (which I'd like to [add to clippy as restriction lints](https://rust-lang.zulipchat.com/#narrow/stream/257328-clippy/topic/Landing.20a.20flotilla.20of.20lints.3F) eventually), and `dylint` also has [lints that look for `env!`/`option_env!`](https://github.com/trailofbits/dylint/blob/109a07e9f27a9651ef33b6677ccaddd21466e97a/examples/general/env_cargo_path/src/lib.rs) (although perhaps not `include`), which would benefit from this. My experience is that it's pretty annoying to (robustly) check uses of builtin macros without these IME, although that's perhaps just my own fault (e.g. I could be doing it wrong). At `@Nilstrieb's` suggestion, I've added a comment that explains why these are here, even though they are not used in the compiler. This is mostly to discourage removal, although it's not a big deal if it happens (I'm certainly not suggesting the presence of these be in any way stable). --- In theory this is a library PR (in that it's in library/core), but I'm going to roll compiler because the existence of this or not is much more likely something they care about rather than libs. Hopefully nobody objects to this. r? compiler
2023-11-05update and clarify addr_of docsRalf Jung-6/+24
2023-11-05Auto merge of #116218 - tgross35:const-maybe-uninit-zeroed, r=dtolnaybors-9/+15
Stabilize `const_maybe_uninit_zeroed` and `const_mem_zeroed` Make `MaybeUninit::zeroed` and `mem::zeroed` const stable. Newly stable API: ```rust // core::mem pub const unsafe fn zeroed<T>() ->; impl<T> MaybeUninit<T> { pub const fn zeroed() -> MaybeUninit<T>; } ``` This relies on features based around `const_mut_refs`. Per `@RalfJung,` this should be OK since we do not leak any `&mut` to the user. For this to be possible, intrinsics `assert_zero_valid` and `assert_mem_uninitialized_valid` were made const stable. Tracking issue: #91850 Zulip discussion: https://rust-lang.zulipchat.com/#narrow/stream/146212-t-compiler.2Fconst-eval/topic/.60const_mut_refs.60.20dependents r? libs-api `@rustbot` label -T-libs +T-libs-api +A-const-eval cc `@RalfJung` `@oli-obk` `@rust-lang/wg-const-eval`
2023-11-04Add diagnostic items for a few of core's builtin macrosThom Chiovoloni-0/+3
2023-11-04Rollup merge of #117534 - RalfJung:str, r=Mark-SimulacrumMatthias Krüger-11/+17
clarify that the str invariant is a safety, not validity, invariant Updates these docs to match https://github.com/rust-lang/reference/pull/792
2023-11-04Rollup merge of #116894 - joshlf:patch-12, r=RalfJungMatthias Krüger-1/+8
Guarantee that `char` has the same size and alignment as `u32`
2023-11-04Rollup merge of #110340 - jmaargh:jmaargh/deref-docs, r=Mark-SimulacrumMatthias Krüger-41/+125
Deref docs: expand and remove "smart pointer" qualifier **Ready for review** ~~This is an unpolished draft to be sanity-checked~~ Fixes #91004 ~~Comments on substance and content of this are welcome. This is deliberately unpolished until ready to review so please try to stay focused on the big-picture.~~ ~~Once this has been sanity checked, I will similarly update `DerefMut` and polish for review.~~
2023-11-04Stabilize `const_mem_zeroed`Trevor Gross-3/+4
Make `core::mem::zeroed` const stable. Newly stable API: // core::mem pub const unsafe fn zeroed<T>() -> T; This is stabilized with `const_maybe_uninit_zeroed` since it is a simple wrapper. In order to make this possible, intrinsics `assert_zero_valid` was made const stable under `const_assert_type2`. `assert_mem_uninitialized_valid` was also made const stable since it is under the same gate.
2023-11-04Stabilize `const_maybe_uninit_zeroed`Trevor Gross-6/+11
Make `MaybeUninit::zeroed` const stable. Newly stable API: // core::mem impl<T> MaybeUninit<T> { pub const fn zeroed() -> MaybeUninit<T>; } Use of `const_mut_refs` should be acceptable since we do not leak the mutability. Tracking issue: #91850
2023-11-04Draft fleshed-out deref docsjmaargh-41/+125
Re-draft Deref docs Make general advice more explicit and note the difference between generic and specific implementations. Re-draft DerefMut docs in-line with Deref Fix Deref docs typos Fix broken links Clarify advice for specific-over-generic impls Add comment addressing Issue #73682 x fmt Copy faillibility warning to DerefMut
2023-11-04avoid acronyms when we don't really need themRalf Jung-12/+11
2023-11-04document ABI compatibilityRalf Jung-4/+109
2023-11-03Make documentation of `slice_first_last_chunk` more consistentTrevor Gross-21/+35
Clarify that these functions return array references. Also change from doing `as` casting to using the less misuseable `.cast()`.
2023-11-03Reverse ordering of `split_{first,last}_chunk` to be `(preceding, last)`Trevor Gross-7/+7
These methods currently return `(last_chunk, preceding_slice)`, which matches the existing `split_x` methods that remove one item. Change these to instead return `(preceding_slice, last_chunk)` which matches string split methods, should be more intuitive, and will allow for consistency with methods that split more items.
2023-11-03Auto merge of #116412 - nnethercote:rm-plugin-support, r=bjorn3bors-2/+2
Remove support for compiler plugins. They've been deprecated for four years. This commit includes the following changes. - It eliminates the `rustc_plugin_impl` crate. - It changes the language used for lints in `compiler/rustc_driver_impl/src/lib.rs` and `compiler/rustc_lint/src/context.rs`. External lints are now called "loaded" lints, rather than "plugins" to avoid confusion with the old plugins. This only has a tiny effect on the output of `-W help`. - E0457 and E0498 are no longer used. - E0463 is narrowed, now only relating to unfound crates, not plugins. - The `plugin` feature was moved from "active" to "removed". - It removes the entire plugins chapter from the unstable book. - It removes quite a few tests, mostly all of those in `tests/ui-fulldeps/plugin/`. Closes #29597. r? `@ghost`
2023-11-04Remove support for compiler plugins.Nicholas Nethercote-2/+2
They've been deprecated for four years. This commit includes the following changes. - It eliminates the `rustc_plugin_impl` crate. - It changes the language used for lints in `compiler/rustc_driver_impl/src/lib.rs` and `compiler/rustc_lint/src/context.rs`. External lints are now called "loaded" lints, rather than "plugins" to avoid confusion with the old plugins. This only has a tiny effect on the output of `-W help`. - E0457 and E0498 are no longer used. - E0463 is narrowed, now only relating to unfound crates, not plugins. - The `plugin` feature was moved from "active" to "removed". - It removes the entire plugins chapter from the unstable book. - It removes quite a few tests, mostly all of those in `tests/ui-fulldeps/plugin/`. Closes #29597.
2023-11-03Auto merge of #115333 - joshlf:patch-5, r=RalfJungbors-9/+15
Guarantee representation of None in NPO This allows users to soundly transmute zeroes into `Option` types subject to the null pointer optimization (NPO). It unblocks https://github.com/google/zerocopy/issues/293.
2023-11-03library: use `copied` instead of manual `map`DaniPopes-2/+2
2023-11-03cfg_attr offset_of_enum feature in doctestGeorge Bateman-1/+2
2023-11-03Update primitive_docs.rsJoshua Liebow-Feeser-2/+3
2023-11-03Feature gate enums in offset_ofGeorge Bateman-1/+1
2023-11-03Auto merge of #117510 - elichai:patch-3, r=cuviperbors-0/+1
Add track_caller to transmute_copy Currently if `size_of::<Src>() < size_of::<Dst>()` you will see the following error: ```rust thread 'test' panicked at /rustc/cc66ad468955717ab92600c770da8c1601a4ff33/library/core/src/mem/mod.rs:1056:5: cannot transmute_copy if Dst is larger than Src ``` This fixes it so it will show the invocation location