Skip to content

Commit

Permalink
Squashed 'library/' changes from 9cc3bc6add3..febaf22f00e
Browse files Browse the repository at this point in the history
febaf22f00e Rollup merge of rust-lang#129592 - saethlin:core-cfg-test, r=tgross35
77a1318f7f7 Rollup merge of rust-lang#129588 - hermit-os:sleep-micros, r=workingjubilee
12fe23bd5dc Rollup merge of rust-lang#129539 - oconnor663:poll_link, r=tgross35
864e465be7b Rollup merge of rust-lang#129377 - chorman0773:unbounded-shifts-impl, r=scottmcm
d958260763a Auto merge of rust-lang#129595 - matthiaskrgr:rollup-4udn7nn, r=matthiaskrgr
8dd3363de6a Remove cfg(test) from library/core
cd554e2b4ea Rollup merge of rust-lang#129544 - mu001999-contrib:dead-code/clean, r=compiler-errors
ff769eef88a Rollup merge of rust-lang#129525 - notriddle:notriddle/fake-variadic-tuple-array, r=GuillaumeGomez
4d22c1c6b37 Auto merge of rust-lang#129488 - saethlin:alignment-precondition, r=workingjubilee
c688deff96a pal/hermit: saturate `usleep` microseconds at `u64::MAX`
8ea71ae5647 Auto merge of rust-lang#129563 - matthiaskrgr:rollup-t6bai2d, r=matthiaskrgr
fdb5fc1fca6 pal/hermit: correctly round up microseconds in `Thread::sleep`
22ec8977a9a link to Future::poll from the Poll docs
a994fbbca83 Rollup merge of rust-lang#129487 - GrigorenkoPV:repr_transparent_external_private_fields, r=compiler-errors
3a339226a95 Rollup merge of rust-lang#129416 - workingjubilee:partial-move-from-stabilization, r=dtolnay
3a8de952989 Rollup merge of rust-lang#129091 - RalfJung:box_as_ptr, r=Amanieu
4de4debd1eb Auto merge of rust-lang#129295 - Zalathar:profiler-builtins, r=Kobzol
8dafd337e12 Auto merge of rust-lang#129521 - matthiaskrgr:rollup-uigv77m, r=matthiaskrgr
d9e489b48ce Removes dead code from the compiler
c14cf57e404 Rollup merge of rust-lang#129481 - scottmcm:update-cb, r=tgross35
acf6f03b6fa Rollup merge of rust-lang#129449 - coolreader18:pin-as_deref_mut-signature, r=dtolnay
112ebc4d5a9 Rollup merge of rust-lang#128735 - jieyouxu:pr-120176-revive, r=cjgillot
49aa496c5bb rustdoc: clean up tuple <-> primitive conversion docs
0fe374666ac Rollup merge of rust-lang#129501 - RalfJung:miri-rust-backtrace, r=Noratrieb
7d5cf38931b Rollup merge of rust-lang#129500 - fee1-dead-contrib:fxrel, r=compiler-errors
e91d825f826 Rollup merge of rust-lang#129323 - Urgau:ptr_fn_addr_eq, r=Mark-Simulacrum
f6470795864 Rollup merge of rust-lang#128596 - RalfJung:const_fn_floating_point_arithmetic, r=nnethercote
f965950f05e New `#[rustc_pub_transparent]` attribute
a6ea125cb0e panicking: improve hint for Miri's RUST_BACKTRACE behavior
a437005e6f3 Build `library/profiler_builtins` from `ci-llvm` if appropriate
693477a3f65 remove invalid `TyCompat` relation for effects
82fc74f6f1a library: Move unstable API of new_uninit to new features
3ee2e18c8dc Enable Alignment::new_unchecked precondition check
0803686e7fb Change `f16` doctests in core to run on x86-64 linux
9359a126d41 Update `compiler_builtins` to `0.1.121`
da02e8b5609 Enable `f16` tests on x86 and x86-64
976fb4aeefc Move into_inner_unchecked back to the bottom of the impl block
2741e8dacb4 Put Pin::as_deref_mut in impl Pin<Ptr>
f670207d0f4 Auto merge of rust-lang#129464 - GuillaumeGomez:rollup-ckfqd7h, r=GuillaumeGomez
5bf661cc64f Rollup merge of rust-lang#129276 - eduardosm:stabilize-char_indices_offset, r=Amanieu
e2614f24b27 Rollup merge of rust-lang#129400 - Amjad50:update-compiler-builtins, r=tgross35
2c06146be10 Rollup merge of rust-lang#127623 - lolbinarycat:fix_remove_dir_all, r=Amanieu
eb747e53dd0 Check that `library/profiler_builtins` actually found some source files
fe33d2c256c fix: fs::remove_dir_all: treat ENOENT as success
3fd591ebdef feat(core): Make `unbounded_shl{l,r}` unstably const and remove `rustc_allow_const_fn_unstable`
2168ce32967 Auto merge of rust-lang#129398 - matthiaskrgr:rollup-50l01ry, r=matthiaskrgr
12944c76047 Update `compiler_builtins` to `0.1.120`
7496478b7a5 stabilize const_fn_floating_point_arithmetic
6f534f94217 Rollup merge of rust-lang#129382 - tgross35:once-cell-const-into-inner, r=Noratrieb
2535017098e Rollup merge of rust-lang#129376 - ChaiTRex:assert_unsafe_precondition_check_language_ub, r=workingjubilee,the8472
4ec19afe669 Rollup merge of rust-lang#129374 - ChaiTRex:digit_unchecked_assert_unsafe_precondition, r=scottmcm
024ec3c0f62 Rollup merge of rust-lang#128432 - g0djan:godjan/wasi_prohibit_implicit_unsafe, r=tgross35
f671c1129b9 Auto merge of rust-lang#129365 - matthiaskrgr:rollup-ebwx6ya, r=matthiaskrgr
5299ef149b1 fix(core): Use correct operations/values in `unbounded_shr` doctests
84230062104 chore: `x fmt`
cbe7338e1f3 fix(core): Add `#![feature(unbounded_shifts)]` to doctests for `unbounded_shr`/`unbounded_shl`
863123bd7c4 Add `const_cell_into_inner` to `OnceCell`
6fd539327d2 chore: `x fmt` and hopefully fix the tidy issue
9d2bb976994 Change `assert_unsafe_precondition` docs to refer to `check_language_ub`
32bd5dfb369 chore: Also format the control flow
5f8cf71d7d6 Manually format functions and use `rhs` instead of `v` from my CE testing
700af565751 feat(core): Add implementations for `unbounded_shl`/`unbounded_shr`
a9ad57eb6a1 Use `assert_unsafe_precondition!` in `AsciiChar::digit_unchecked`
77bd65fdedc Rollup merge of rust-lang#129321 - krtab:float_sum, r=workingjubilee
cc219788b51 Rollup merge of rust-lang#129232 - ivmarkov:master, r=workingjubilee
c9cf844ccd3 Rollup merge of rust-lang#127945 - tgross35:debug-more-non-exhaustive, r=Noratrieb
d37ebfea900 Rollup merge of rust-lang#129332 - cuviper:cstr-cast, r=compiler-errors
6d01ed8b3bd Rollup merge of rust-lang#129312 - tbu-:pr_str_not_impl_error, r=Noratrieb
93319c80754 Fix stability attribute of `impl !Error for &str`
7f8bdd574b6 Auto merge of rust-lang#126556 - saethlin:layout-precondition, r=joboet
9e9141f54eb Auto merge of rust-lang#128866 - scottmcm:update-stdarch, r=tgross35
d47cfba89b7 Update stdarch submodule
b507a8bfeb9 Try to golf down the amount of code in Layout
32b574e848f Avoid extra `cast()`s after `CStr::as_ptr()`
9d4113ff24d Rollup merge of rust-lang#129294 - scottmcm:stabilize-repeat-n, r=Noratrieb
62d240d9b6a Implement `ptr::fn_addr_eq`
529e33acb80 Change neutral element of <fNN as iter::Sum> to neg_zero
126935f7257 Stabilize `iter::repeat_n`
91439ce7b58 Auto merge of rust-lang#129226 - RalfJung:libc, r=Mark-Simulacrum
bef7be0e71e Add a precondition check for Layout::from_size_align_unchecked
a55ab85ad47 Stabilize feature `char_indices_offset`
7f45dcfa195 library: bump libc dependency
ebe99f3b8b6 Rollup merge of rust-lang#128902 - evanj:evan.jones/env-var-doc, r=workingjubilee
8bdd95ba4da soft-deprecate the addr_of macros
23b0aadc2ce code review improvements
0b0dad4af6f Fix for issue rust-lang#129212 for the ESP-IDF
bd7aa576572 Auto merge of rust-lang#126877 - GrigorenkoPV:clone_to_uninit, r=dtolnay
d3c08f8f8ac Auto merge of rust-lang#128598 - RalfJung:float-comments, r=workingjubilee
dc5fed53253 Auto merge of rust-lang#106943 - mina86:exact_size_take_repeat, r=dtolnay
88927ac26eb Auto merge of rust-lang#116528 - daxpedda:stabilize-ready-into-inner, r=dtolnay
9952947d86b Rollup merge of rust-lang#129161 - dtolnay:spawnunck, r=Noratrieb
db3abec9727 Rollup merge of rust-lang#129086 - slanterns:is_none_or, r=dtolnay
44a558dc7dc Stabilize std::thread::Builder::spawn_unchecked
5c553c41134 float to/from bits and classify: update comments regarding non-conformant hardware
9704e2df60c Rollup merge of rust-lang#128064 - ijackson:noop-waker-doc, r=workingjubilee
0497f0c6c91 Add cautionary paragraph about noop wakers.
16dd42669a2 Rollup merge of rust-lang#128946 - orlp:faster-ip-hash, r=joboet
383c4db14b0 Rollup merge of rust-lang#128925 - dingxiangfei2009:smart-ptr-helper-attr, r=compiler-errors
ba3a942d5de Rollup merge of rust-lang#125970 - RalfJung:before_exec, r=m-ou-se
0dbf8cff9de Rollup merge of rust-lang#128954 - zachs18:fromresidual-no-default, r=scottmcm
4f0959927f2 Rollup merge of rust-lang#128570 - folkertdev:stabilize-asm-const, r=Amanieu
b6c9e44d2a6 add Box::as_ptr and Box::as_mut_ptr methods
23d1309b02e CommandExt::before_exec: deprecate safety in edition 2024
9858d49b168 stabilize `is_none_or`
fd2b339c5a6 Auto merge of rust-lang#129060 - matthiaskrgr:rollup-s72gpif, r=matthiaskrgr
3b8aab7df81 Rollup merge of rust-lang#129001 - cblh:fix/128713, r=Noratrieb
16edf695130 Rollup merge of rust-lang#128873 - ChrisDenton:windows-targets, r=Mark-Simulacrum
0199b00c91f Rollup merge of rust-lang#128759 - notriddle:notriddle/spec-to-string, r=workingjubilee,compiler-errors
c6dc243b917 stabilize `asm_const`
b4bfc215048 Rollup merge of rust-lang#129034 - henryksloan:coroutine-must-use, r=joboet
b56fdcb2730 Rollup merge of rust-lang#127857 - tbu-:pr_deprecated_safe_todo, r=petrochenkov
77f462da866 Rollup merge of rust-lang#122884 - mzabaluev:pow-remove-exit-branch, r=Amanieu
0a6a74bce1a Reduce merged doctest source code size
a83dde61642 Mark location doctest as standalone since file information will not work in merged doctest file
7334c7178ce Auto merge of rust-lang#129046 - matthiaskrgr:rollup-9x4xgak, r=matthiaskrgr
9ed72103664 Rollup merge of rust-lang#128745 - dtolnay:spawnunchecked, r=workingjubilee
c39d90e4d51 Rollup merge of rust-lang#128655 - joboet:play_with_the_dice, r=ChrisDenton
f81c96a863e `#[deprecated_safe_2024]`: Also use the `// TODO:` hint in the compiler error
23a19685c9b Allow to customize `// TODO:` comment for deprecated safe autofix
37017c0f6f6 Auto merge of rust-lang#128962 - devnexen:fs_get_mode_haiku, r=workingjubilee
8a2671a2889 Revert to original loop for const pow exponents
c5e81895dfb Auto merge of rust-lang#128742 - RalfJung:miri-vtable-uniqueness, r=saethlin
ac682f19873 Add must_use attribute to Coroutine trait
658904d1a9a chore(lib): fmt core::fmt::Formatter's write_fmt method
7eb73762bb3 trying common codepath for every unixes
5fabf93c765 std::fs: get_mode implementation for haiku.
e3da824e62c Rollup merge of rust-lang#129017 - its-the-shrimp:core_fmt_from_fn, r=Noratrieb
b247d9a7a9a derive(SmartPointer): register helper attributes
aa854485cea Explicitly specify type parameter on FromResidual impls in stdlib.
262a4f6b641 std::fmt::FormatterFn -> std::fmt::FromFn
ceceae30ced Rollup merge of rust-lang#128632 - joboet:dont_overwrite_style, r=Amanieu
e8f7afeb117 Rollup merge of rust-lang#128149 - RalfJung:nontemporal_store, r=jieyouxu,Amanieu,Jubilee
7dd208356e1 chore(lib): Enhance documentation for core::fmt::Formatter's write_fmt method
048efd0bcec ignore some vtable/fn ptr equality tests in Miri, their result is not fully predictable
a367a12df0a std: use `/scheme/rand` on Redox
1ca6b42583f std: do not overwrite style in `get_backtrace_style`
91477777de1 Auto merge of rust-lang#128862 - cblh:fix/128855, r=scottmcm
56e1afe0810 Auto merge of rust-lang#126793 - saethlin:mono-rawvec, r=scottmcm
ec7a585087c Do not use unnecessary endian conversion.
f48facfed72 Rollup merge of rust-lang#128882 - RalfJung:local-waker-will-wake, r=cuviper
b581949746c Rollup merge of rust-lang#120314 - mina86:i, r=Mark-Simulacrum
451feca66ac Fix stability annotation and expand comment
2e34ac388e0 Hash Ipv*Addr as an integer
b8b61e1e931 Auto merge of rust-lang#128927 - GuillaumeGomez:rollup-ei2lr0f, r=GuillaumeGomez
44f5b4fe515 Rollup merge of rust-lang#128273 - Voultapher:improve-ord-violation-help, r=workingjubilee
3d7afa0e721 Update std and compiler
971df1c2948 Stabilize `min_exhaustive_patterns`
c37c6665b9b Add an optimizer hint for the capacity that with_capacity_in returns
c8cbd5c499c Hoist IS_ZST check out of RawVecInner::from_*_in
e843f7103a0 Polymorphize RawVec
dc39cbf9234 core: optimise Debug impl for ascii::Char
9668691af5d doc: std::env::var: Returns None for names with '=' or NUL byte
5d5d8bc73a9 Rollup merge of rust-lang#128859 - MinxuanZ:mips-sig, r=Amanieu
825def017bc Rollup merge of rust-lang#128817 - biabbas:vxworks_update, r=tgross35
6e933a82c90 make LocalWaker::will_wake consistent with Waker::will_wake
118c71296c8 Fix linkchecker issue
b1460b93704 Exclude windows-targets from the workspace
a3a6a9856c2 Add windows-targets crate to std's sysroot
f74940d94c2 Rollup merge of rust-lang#128824 - GuillaumeGomez:update-compiler-builtins, r=Amanieu
39b1eafc08c VxWorks: Add safety comment for vxCpuEnabledGet
8b0a25df983 fix: Ensure `Guard`'s `drop` method is removed at `opt-level=s` for `Copy` types
c54958c5dad delete space
dadbd585cb3 fix format
7c34ebf93de [SPARC] fix the name of signal 19 in sparc arch
b75648a7515 [MIPS] fix the name of signal 19 in mips
3840b09aae3 Rollup merge of rust-lang#128818 - RalfJung:std-miri-floats, r=tgross35
d03bb5e33a9 Rollup merge of rust-lang#128640 - RalfJung:rwlock-macos-miri, r=joboet
7680a3c7598 Rollup merge of rust-lang#128749 - tgross35:float-inline, r=scottmcm
9df61adfaa1 Rollup merge of rust-lang#128306 - WiktorPrzetacznik:WiktorPrzetacznik-nonnull-alignoffset-update, r=Amanieu
39860ad52d1 Update compiler-builtins version to 0.1.118
42811859e46 std float tests: special-case Miri in feature detection
4d6b36adfe6 Vxworks: Extern taskNameSet and fix build errors
e24a6ca11fa rwlock: disable 'frob' test in Miri on macOS
c21ba971a8a Fix VxWorks available parallelism: Move nonzero::uncheked into unsafe block
249541802ec Rollup merge of rust-lang#128800 - clarfonthey:core-pattern-type, r=compiler-errors
79cd72af482 Rollup merge of rust-lang#128691 - tgross35:update-builtins, r=Amanieu
8f840157d66 Add tracking issue to core-pattern-type
b8f7f384f75 Stabilize `Ready::into_inner()`
62ccdeb315d Rollup merge of rust-lang#128261 - clarfonthey:iter-default, r=dtolnay
b4e53303f07 alloc: make `to_string_str!` a bit less complex
ec74467d64c Mark `{f32,f64}::{next_up,next_down,midpoint}` inline
b90a026d6f8 Rollup merge of rust-lang#128766 - Monadic-Cat:patch-1, r=tgross35
5d7906c0270 Rollup merge of rust-lang#128417 - tgross35:f16-f128-math, r=dtolnay
83d1d167737 Trivial grammar fix in const keyword docs
97384fa701b Update `compiler-builtins` to 0.1.117
6dc79bb6235 Rollup merge of rust-lang#128751 - devnexen:vxworks_set_thread_name, r=tgross35
432425d28f7 Rollup merge of rust-lang#128539 - biabbas:deny_unsafe, r=workingjubilee
1bd5338eadf Rollup merge of rust-lang#128406 - lolbinarycat:bufreader_peek, r=Mark-Simulacrum
e20aa6430f1 Rollup merge of rust-lang#125048 - dingxiangfei2009:stable-deref, r=amanieu
bc13c6ca57a alloc: add ToString specialization for `&&str`
14fe723f6b9 std::thread: set_name implementation proposal for vxWorks.
67fa603356d Remove unused lifetime parameter from spawn_unchecked
4a3da122172 Add a special case for CStr/CString in the improper_ctypes lint
51ec2bb7ea2 implement BufReader::peek
e6aede2233f nontemporal_store: make sure that the intrinsic is truly just a hint
a300df74d13 WASI fixing unsafe_op_in_unsafe_fn for std::{os, sys}
59436fcc0b1 std: refactor UNIX random data generation
6fafc6b5d92 Apply review comments to PartialOrd section
7850a64f5bb Forbid unsafe_op_in_unsafe_fn in vxworks specific os and sys files
e844efffe8f Add a disclaimer about x86 `f128` math functions
21d297b29ad Update comments for `{f16, f32, f64, f128}::midpoint`
ad27d08e73e Add `core` functions for `f16` and `f128` that require math routines
c6407b0bfa7 Add math functions for `f16` and `f128`
d9b1de5180d Add math intrinsics for `f16` and `f128`
3c1586b3ce8 Hide internal sort module
21887129721 Apply review comments
2ebe00aa0ba PinCoerceUnsized trait into core
569ab6a3a03 CloneToUninit: use a private specialization trait
26874cc98cc Sparkle some attributes over `CloneToUninit` stuff
e8c37187b60 impl CloneToUninit for Path and OsStr
ef8c591ec02 impl CloneToUninit for str and CStr
65c6173bfe1 Update NonNull::align_offset quarantees
b014b0d7b74 Improve panic sections for sort*, sort_unstable* and select_nth_unstable*
9bcfe84e72b Improve panic message and surrounding documentation for Ord violations
7e55abb1837 Okay, I guess I have to give these a different feature name
bdc18e2ea2b impl Default for collection iterators that don't already have it
971aa37f27b LocalWaker docs: Make long-ago omitted but probably intended changes
c4fdac9fe60 Docs for Waker and LocalWaker: Add cross-refs in comment
9c299bc6b10 Implement `debug_more_non_exhaustive`
b405024dc09 Make use of raw strings in `core::fmt::builders`
20e64bd6cd3 Use is_val_statically_known to optimize pow
05ee32298cb Explicitly unroll integer pow for small exponents
4cfe24a3555 Optimize integer pow by removing exit branch
7c219da2111 Implement DoubleEnded and ExactSize for Take<Repeat> and Take<RepeatWith>

git-subtree-dir: library
git-subtree-split: febaf22f00e7290f42d3f6f50c4a9dbe8b4cbe5f
  • Loading branch information
carolynzech committed Aug 28, 2024
1 parent 9d7b420 commit 83dad78
Show file tree
Hide file tree
Showing 148 changed files with 8,065 additions and 2,340 deletions.
15 changes: 10 additions & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ members = [
exclude = [
# stdarch has its own Cargo workspace
"stdarch",
"windows_targets"
]

[profile.release.package.compiler_builtins]
Expand Down
5 changes: 1 addition & 4 deletions alloc/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,7 @@ edition = "2021"

[dependencies]
core = { path = "../core" }
compiler_builtins = { version = "0.1.114", features = ['rustc-dep-of-std'] }

[target.'cfg(not(any(target_arch = "aarch64", target_arch = "x86", target_arch = "x86_64")))'.dependencies]
compiler_builtins = { version = "0.1.114", features = ["no-f16-f128"] }
compiler_builtins = { version = "0.1.121", features = ['rustc-dep-of-std'] }

[dev-dependencies]
rand = { version = "0.8.5", default-features = false, features = ["alloc"] }
Expand Down
103 changes: 99 additions & 4 deletions alloc/src/boxed.rs
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ use core::ops::{
AsyncFn, AsyncFnMut, AsyncFnOnce, CoerceUnsized, Coroutine, CoroutineState, Deref, DerefMut,
DerefPure, DispatchFromDyn, Receiver,
};
use core::pin::Pin;
use core::pin::{Pin, PinCoerceUnsized};
use core::ptr::{self, addr_of_mut, NonNull, Unique};
use core::task::{Context, Poll};
use core::{borrow, fmt, slice};
Expand Down Expand Up @@ -293,6 +293,7 @@ impl<T> Box<T> {
///
/// ```
/// #![feature(new_uninit)]
/// #![feature(new_zeroed_alloc)]
///
/// let zero = Box::<u32>::new_zeroed();
/// let zero = unsafe { zero.assume_init() };
Expand All @@ -303,7 +304,7 @@ impl<T> Box<T> {
/// [zeroed]: mem::MaybeUninit::zeroed
#[cfg(not(no_global_oom_handling))]
#[inline]
#[unstable(feature = "new_uninit", issue = "63291")]
#[unstable(feature = "new_zeroed_alloc", issue = "129396")]
#[must_use]
pub fn new_zeroed() -> Box<mem::MaybeUninit<T>> {
Self::new_zeroed_in(Global)
Expand Down Expand Up @@ -684,6 +685,7 @@ impl<T> Box<[T]> {
/// # Examples
///
/// ```
/// #![feature(new_zeroed_alloc)]
/// #![feature(new_uninit)]
///
/// let values = Box::<[u32]>::new_zeroed_slice(3);
Expand All @@ -694,7 +696,7 @@ impl<T> Box<[T]> {
///
/// [zeroed]: mem::MaybeUninit::zeroed
#[cfg(not(no_global_oom_handling))]
#[unstable(feature = "new_uninit", issue = "63291")]
#[unstable(feature = "new_zeroed_alloc", issue = "129396")]
#[must_use]
pub fn new_zeroed_slice(len: usize) -> Box<[mem::MaybeUninit<T>]> {
unsafe { RawVec::with_capacity_zeroed(len).into_box(len) }
Expand Down Expand Up @@ -955,6 +957,7 @@ impl<T, A: Allocator> Box<mem::MaybeUninit<T>, A> {
/// # Examples
///
/// ```
/// #![feature(box_uninit_write)]
/// #![feature(new_uninit)]
///
/// let big_box = Box::<[usize; 1024]>::new_uninit();
Expand All @@ -972,7 +975,7 @@ impl<T, A: Allocator> Box<mem::MaybeUninit<T>, A> {
/// assert_eq!(*x, i);
/// }
/// ```
#[unstable(feature = "new_uninit", issue = "63291")]
#[unstable(feature = "box_uninit_write", issue = "129397")]
#[inline]
pub fn write(mut boxed: Self, value: T) -> Box<T, A> {
unsafe {
Expand Down Expand Up @@ -1254,6 +1257,95 @@ impl<T: ?Sized, A: Allocator> Box<T, A> {
unsafe { (Unique::from(&mut *ptr), alloc) }
}

/// Returns a raw mutable pointer to the `Box`'s contents.
///
/// The caller must ensure that the `Box` outlives the pointer this
/// function returns, or else it will end up dangling.
///
/// This method guarantees that for the purpose of the aliasing model, this method
/// does not materialize a reference to the underlying memory, and thus the returned pointer
/// will remain valid when mixed with other calls to [`as_ptr`] and [`as_mut_ptr`].
/// Note that calling other methods that materialize references to the memory
/// may still invalidate this pointer.
/// See the example below for how this guarantee can be used.
///
/// # Examples
///
/// Due to the aliasing guarantee, the following code is legal:
///
/// ```rust
/// #![feature(box_as_ptr)]
///
/// unsafe {
/// let mut b = Box::new(0);
/// let ptr1 = Box::as_mut_ptr(&mut b);
/// ptr1.write(1);
/// let ptr2 = Box::as_mut_ptr(&mut b);
/// ptr2.write(2);
/// // Notably, the write to `ptr2` did *not* invalidate `ptr1`:
/// ptr1.write(3);
/// }
/// ```
///
/// [`as_mut_ptr`]: Self::as_mut_ptr
/// [`as_ptr`]: Self::as_ptr
#[unstable(feature = "box_as_ptr", issue = "129090")]
#[rustc_never_returns_null_ptr]
#[inline]
pub fn as_mut_ptr(b: &mut Self) -> *mut T {
// This is a primitive deref, not going through `DerefMut`, and therefore not materializing
// any references.
ptr::addr_of_mut!(**b)
}

/// Returns a raw pointer to the `Box`'s contents.
///
/// The caller must ensure that the `Box` outlives the pointer this
/// function returns, or else it will end up dangling.
///
/// The caller must also ensure that the memory the pointer (non-transitively) points to
/// is never written to (except inside an `UnsafeCell`) using this pointer or any pointer
/// derived from it. If you need to mutate the contents of the `Box`, use [`as_mut_ptr`].
///
/// This method guarantees that for the purpose of the aliasing model, this method
/// does not materialize a reference to the underlying memory, and thus the returned pointer
/// will remain valid when mixed with other calls to [`as_ptr`] and [`as_mut_ptr`].
/// Note that calling other methods that materialize mutable references to the memory,
/// as well as writing to this memory, may still invalidate this pointer.
/// See the example below for how this guarantee can be used.
///
/// # Examples
///
/// Due to the aliasing guarantee, the following code is legal:
///
/// ```rust
/// #![feature(box_as_ptr)]
///
/// unsafe {
/// let mut v = Box::new(0);
/// let ptr1 = Box::as_ptr(&v);
/// let ptr2 = Box::as_mut_ptr(&mut v);
/// let _val = ptr2.read();
/// // No write to this memory has happened yet, so `ptr1` is still valid.
/// let _val = ptr1.read();
/// // However, once we do a write...
/// ptr2.write(1);
/// // ... `ptr1` is no longer valid.
/// // This would be UB: let _val = ptr1.read();
/// }
/// ```
///
/// [`as_mut_ptr`]: Self::as_mut_ptr
/// [`as_ptr`]: Self::as_ptr
#[unstable(feature = "box_as_ptr", issue = "129090")]
#[rustc_never_returns_null_ptr]
#[inline]
pub fn as_ptr(b: &Self) -> *const T {
// This is a primitive deref, not going through `DerefMut`, and therefore not materializing
// any references.
ptr::addr_of!(**b)
}

/// Returns a reference to the underlying allocator.
///
/// Note: this is an associated function, which means that you have
Expand Down Expand Up @@ -2726,3 +2818,6 @@ impl<T: core::error::Error> core::error::Error for Box<T> {
core::error::Error::provide(&**self, request);
}
}

#[unstable(feature = "pin_coerce_unsized_trait", issue = "123430")]
unsafe impl<T: ?Sized, A: Allocator> PinCoerceUnsized for Box<T, A> {}
14 changes: 14 additions & 0 deletions alloc/src/collections/binary_heap/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1433,6 +1433,20 @@ pub struct Iter<'a, T: 'a> {
iter: slice::Iter<'a, T>,
}

#[stable(feature = "default_iters_sequel", since = "CURRENT_RUSTC_VERSION")]
impl<T> Default for Iter<'_, T> {
/// Creates an empty `binary_heap::Iter`.
///
/// ```
/// # use std::collections::binary_heap;
/// let iter: binary_heap::Iter<'_, u8> = Default::default();
/// assert_eq!(iter.len(), 0);
/// ```
fn default() -> Self {
Iter { iter: Default::default() }
}
}

#[stable(feature = "collection_debug", since = "1.17.0")]
impl<T: fmt::Debug> fmt::Debug for Iter<'_, T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
Expand Down
28 changes: 28 additions & 0 deletions alloc/src/collections/btree/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2016,6 +2016,20 @@ impl<K, V> Default for Range<'_, K, V> {
}
}

#[stable(feature = "default_iters_sequel", since = "CURRENT_RUSTC_VERSION")]
impl<K, V> Default for RangeMut<'_, K, V> {
/// Creates an empty `btree_map::RangeMut`.
///
/// ```
/// # use std::collections::btree_map;
/// let iter: btree_map::RangeMut<'_, u8, u8> = Default::default();
/// assert_eq!(iter.count(), 0);
/// ```
fn default() -> Self {
RangeMut { inner: Default::default(), _marker: PhantomData }
}
}

#[stable(feature = "map_values_mut", since = "1.10.0")]
impl<'a, K, V> Iterator for ValuesMut<'a, K, V> {
type Item = &'a mut V;
Expand Down Expand Up @@ -2050,6 +2064,20 @@ impl<K, V> ExactSizeIterator for ValuesMut<'_, K, V> {
#[stable(feature = "fused", since = "1.26.0")]
impl<K, V> FusedIterator for ValuesMut<'_, K, V> {}

#[stable(feature = "default_iters_sequel", since = "CURRENT_RUSTC_VERSION")]
impl<K, V> Default for ValuesMut<'_, K, V> {
/// Creates an empty `btree_map::ValuesMut`.
///
/// ```
/// # use std::collections::btree_map;
/// let iter: btree_map::ValuesMut<'_, u8, u8> = Default::default();
/// assert_eq!(iter.count(), 0);
/// ```
fn default() -> Self {
ValuesMut { inner: Default::default() }
}
}

#[stable(feature = "map_into_keys_values", since = "1.54.0")]
impl<K, V, A: Allocator + Clone> Iterator for IntoKeys<K, V, A> {
type Item = K;
Expand Down
2 changes: 2 additions & 0 deletions alloc/src/collections/vec_deque/into_iter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ impl<T, A: Allocator> Iterator for IntoIter<T, A> {
{
match self.try_fold(init, |b, item| Ok::<B, !>(f(b, item))) {
Ok(b) => b,
#[cfg(bootstrap)]
Err(e) => match e {},
}
}
Expand Down Expand Up @@ -242,6 +243,7 @@ impl<T, A: Allocator> DoubleEndedIterator for IntoIter<T, A> {
{
match self.try_rfold(init, |b, item| Ok::<B, !>(f(b, item))) {
Ok(b) => b,
#[cfg(bootstrap)]
Err(e) => match e {},
}
}
Expand Down
14 changes: 14 additions & 0 deletions alloc/src/collections/vec_deque/iter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,20 @@ impl<T: fmt::Debug> fmt::Debug for Iter<'_, T> {
}
}

#[stable(feature = "default_iters_sequel", since = "CURRENT_RUSTC_VERSION")]
impl<T> Default for Iter<'_, T> {
/// Creates an empty `vec_deque::Iter`.
///
/// ```
/// # use std::collections::vec_deque;
/// let iter: vec_deque::Iter<'_, u8> = Default::default();
/// assert_eq!(iter.len(), 0);
/// ```
fn default() -> Self {
Iter { i1: Default::default(), i2: Default::default() }
}
}

// FIXME(#26925) Remove in favor of `#[derive(Clone)]`
#[stable(feature = "rust1", since = "1.0.0")]
impl<T> Clone for Iter<'_, T> {
Expand Down
14 changes: 14 additions & 0 deletions alloc/src/collections/vec_deque/iter_mut.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,20 @@ impl<T: fmt::Debug> fmt::Debug for IterMut<'_, T> {
}
}

#[stable(feature = "default_iters_sequel", since = "CURRENT_RUSTC_VERSION")]
impl<T> Default for IterMut<'_, T> {
/// Creates an empty `vec_deque::IterMut`.
///
/// ```
/// # use std::collections::vec_deque;
/// let iter: vec_deque::IterMut<'_, u8> = Default::default();
/// assert_eq!(iter.len(), 0);
/// ```
fn default() -> Self {
IterMut { i1: Default::default(), i2: Default::default() }
}
}

#[stable(feature = "rust1", since = "1.0.0")]
impl<'a, T> Iterator for IterMut<'a, T> {
type Item = &'a mut T;
Expand Down
2 changes: 1 addition & 1 deletion alloc/src/fmt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -581,7 +581,7 @@ pub use core::fmt::Alignment;
#[stable(feature = "rust1", since = "1.0.0")]
pub use core::fmt::Error;
#[unstable(feature = "debug_closure_helpers", issue = "117729")]
pub use core::fmt::FormatterFn;
pub use core::fmt::{from_fn, FromFn};
#[stable(feature = "rust1", since = "1.0.0")]
pub use core::fmt::{write, Arguments};
#[stable(feature = "rust1", since = "1.0.0")]
Expand Down
2 changes: 1 addition & 1 deletion alloc/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -131,13 +131,13 @@
#![feature(inplace_iteration)]
#![feature(iter_advance_by)]
#![feature(iter_next_chunk)]
#![feature(iter_repeat_n)]
#![feature(layout_for_ptr)]
#![feature(local_waker)]
#![feature(maybe_uninit_slice)]
#![feature(maybe_uninit_uninit_array_transpose)]
#![feature(panic_internals)]
#![feature(pattern)]
#![feature(pin_coerce_unsized_trait)]
#![feature(ptr_internals)]
#![feature(ptr_metadata)]
#![feature(ptr_sub_ptr)]
Expand Down
Loading

0 comments on commit 83dad78

Please sign in to comment.