Skip to content

Commit

Permalink
Squashed 'library/' changes from 9cc3bc6..febaf22
Browse files Browse the repository at this point in the history
febaf22 Rollup merge of rust-lang#129592 - saethlin:core-cfg-test, r=tgross35
77a1318 Rollup merge of rust-lang#129588 - hermit-os:sleep-micros, r=workingjubilee
12fe23b Rollup merge of rust-lang#129539 - oconnor663:poll_link, r=tgross35
864e465 Rollup merge of rust-lang#129377 - chorman0773:unbounded-shifts-impl, r=scottmcm
d958260 Auto merge of rust-lang#129595 - matthiaskrgr:rollup-4udn7nn, r=matthiaskrgr
8dd3363 Remove cfg(test) from library/core
cd554e2 Rollup merge of rust-lang#129544 - mu001999-contrib:dead-code/clean, r=compiler-errors
ff769ee Rollup merge of rust-lang#129525 - notriddle:notriddle/fake-variadic-tuple-array, r=GuillaumeGomez
4d22c1c Auto merge of rust-lang#129488 - saethlin:alignment-precondition, r=workingjubilee
c688def pal/hermit: saturate `usleep` microseconds at `u64::MAX`
8ea71ae Auto merge of rust-lang#129563 - matthiaskrgr:rollup-t6bai2d, r=matthiaskrgr
fdb5fc1 pal/hermit: correctly round up microseconds in `Thread::sleep`
22ec897 link to Future::poll from the Poll docs
a994fbb Rollup merge of rust-lang#129487 - GrigorenkoPV:repr_transparent_external_private_fields, r=compiler-errors
3a33922 Rollup merge of rust-lang#129416 - workingjubilee:partial-move-from-stabilization, r=dtolnay
3a8de95 Rollup merge of rust-lang#129091 - RalfJung:box_as_ptr, r=Amanieu
4de4deb Auto merge of rust-lang#129295 - Zalathar:profiler-builtins, r=Kobzol
8dafd33 Auto merge of rust-lang#129521 - matthiaskrgr:rollup-uigv77m, r=matthiaskrgr
d9e489b Removes dead code from the compiler
c14cf57 Rollup merge of rust-lang#129481 - scottmcm:update-cb, r=tgross35
acf6f03 Rollup merge of rust-lang#129449 - coolreader18:pin-as_deref_mut-signature, r=dtolnay
112ebc4 Rollup merge of rust-lang#128735 - jieyouxu:pr-120176-revive, r=cjgillot
49aa496 rustdoc: clean up tuple <-> primitive conversion docs
0fe3746 Rollup merge of rust-lang#129501 - RalfJung:miri-rust-backtrace, r=Noratrieb
7d5cf38 Rollup merge of rust-lang#129500 - fee1-dead-contrib:fxrel, r=compiler-errors
e91d825 Rollup merge of rust-lang#129323 - Urgau:ptr_fn_addr_eq, r=Mark-Simulacrum
f647079 Rollup merge of rust-lang#128596 - RalfJung:const_fn_floating_point_arithmetic, r=nnethercote
f965950 New `#[rustc_pub_transparent]` attribute
a6ea125 panicking: improve hint for Miri's RUST_BACKTRACE behavior
a437005 Build `library/profiler_builtins` from `ci-llvm` if appropriate
693477a remove invalid `TyCompat` relation for effects
82fc74f library: Move unstable API of new_uninit to new features
3ee2e18 Enable Alignment::new_unchecked precondition check
0803686 Change `f16` doctests in core to run on x86-64 linux
9359a12 Update `compiler_builtins` to `0.1.121`
da02e8b Enable `f16` tests on x86 and x86-64
976fb4a Move into_inner_unchecked back to the bottom of the impl block
2741e8d Put Pin::as_deref_mut in impl Pin<Ptr>
f670207 Auto merge of rust-lang#129464 - GuillaumeGomez:rollup-ckfqd7h, r=GuillaumeGomez
5bf661c Rollup merge of rust-lang#129276 - eduardosm:stabilize-char_indices_offset, r=Amanieu
e2614f2 Rollup merge of rust-lang#129400 - Amjad50:update-compiler-builtins, r=tgross35
2c06146 Rollup merge of rust-lang#127623 - lolbinarycat:fix_remove_dir_all, r=Amanieu
eb747e5 Check that `library/profiler_builtins` actually found some source files
fe33d2c fix: fs::remove_dir_all: treat ENOENT as success
3fd591e feat(core): Make `unbounded_shl{l,r}` unstably const and remove `rustc_allow_const_fn_unstable`
2168ce3 Auto merge of rust-lang#129398 - matthiaskrgr:rollup-50l01ry, r=matthiaskrgr
12944c7 Update `compiler_builtins` to `0.1.120`
7496478 stabilize const_fn_floating_point_arithmetic
6f534f9 Rollup merge of rust-lang#129382 - tgross35:once-cell-const-into-inner, r=Noratrieb
2535017 Rollup merge of rust-lang#129376 - ChaiTRex:assert_unsafe_precondition_check_language_ub, r=workingjubilee,the8472
4ec19af Rollup merge of rust-lang#129374 - ChaiTRex:digit_unchecked_assert_unsafe_precondition, r=scottmcm
024ec3c Rollup merge of rust-lang#128432 - g0djan:godjan/wasi_prohibit_implicit_unsafe, r=tgross35
f671c11 Auto merge of rust-lang#129365 - matthiaskrgr:rollup-ebwx6ya, r=matthiaskrgr
5299ef1 fix(core): Use correct operations/values in `unbounded_shr` doctests
8423006 chore: `x fmt`
cbe7338 fix(core): Add `#![feature(unbounded_shifts)]` to doctests for `unbounded_shr`/`unbounded_shl`
863123b Add `const_cell_into_inner` to `OnceCell`
6fd5393 chore: `x fmt` and hopefully fix the tidy issue
9d2bb97 Change `assert_unsafe_precondition` docs to refer to `check_language_ub`
32bd5df chore: Also format the control flow
5f8cf71 Manually format functions and use `rhs` instead of `v` from my CE testing
700af56 feat(core): Add implementations for `unbounded_shl`/`unbounded_shr`
a9ad57e Use `assert_unsafe_precondition!` in `AsciiChar::digit_unchecked`
77bd65f Rollup merge of rust-lang#129321 - krtab:float_sum, r=workingjubilee
cc21978 Rollup merge of rust-lang#129232 - ivmarkov:master, r=workingjubilee
c9cf844 Rollup merge of rust-lang#127945 - tgross35:debug-more-non-exhaustive, r=Noratrieb
d37ebfe Rollup merge of rust-lang#129332 - cuviper:cstr-cast, r=compiler-errors
6d01ed8 Rollup merge of rust-lang#129312 - tbu-:pr_str_not_impl_error, r=Noratrieb
93319c8 Fix stability attribute of `impl !Error for &str`
7f8bdd5 Auto merge of rust-lang#126556 - saethlin:layout-precondition, r=joboet
9e9141f Auto merge of rust-lang#128866 - scottmcm:update-stdarch, r=tgross35
d47cfba Update stdarch submodule
b507a8b Try to golf down the amount of code in Layout
32b574e Avoid extra `cast()`s after `CStr::as_ptr()`
9d4113f Rollup merge of rust-lang#129294 - scottmcm:stabilize-repeat-n, r=Noratrieb
62d240d Implement `ptr::fn_addr_eq`
529e33a Change neutral element of <fNN as iter::Sum> to neg_zero
126935f Stabilize `iter::repeat_n`
91439ce Auto merge of rust-lang#129226 - RalfJung:libc, r=Mark-Simulacrum
bef7be0 Add a precondition check for Layout::from_size_align_unchecked
a55ab85 Stabilize feature `char_indices_offset`
7f45dcf library: bump libc dependency
ebe99f3 Rollup merge of rust-lang#128902 - evanj:evan.jones/env-var-doc, r=workingjubilee
8bdd95b soft-deprecate the addr_of macros
23b0aad code review improvements
0b0dad4 Fix for issue rust-lang#129212 for the ESP-IDF
bd7aa57 Auto merge of rust-lang#126877 - GrigorenkoPV:clone_to_uninit, r=dtolnay
d3c08f8 Auto merge of rust-lang#128598 - RalfJung:float-comments, r=workingjubilee
dc5fed5 Auto merge of rust-lang#106943 - mina86:exact_size_take_repeat, r=dtolnay
88927ac Auto merge of rust-lang#116528 - daxpedda:stabilize-ready-into-inner, r=dtolnay
9952947 Rollup merge of rust-lang#129161 - dtolnay:spawnunck, r=Noratrieb
db3abec Rollup merge of rust-lang#129086 - slanterns:is_none_or, r=dtolnay
44a558d Stabilize std::thread::Builder::spawn_unchecked
5c553c4 float to/from bits and classify: update comments regarding non-conformant hardware
9704e2d Rollup merge of rust-lang#128064 - ijackson:noop-waker-doc, r=workingjubilee
0497f0c Add cautionary paragraph about noop wakers.
16dd426 Rollup merge of rust-lang#128946 - orlp:faster-ip-hash, r=joboet
383c4db Rollup merge of rust-lang#128925 - dingxiangfei2009:smart-ptr-helper-attr, r=compiler-errors
ba3a942 Rollup merge of rust-lang#125970 - RalfJung:before_exec, r=m-ou-se
0dbf8cf Rollup merge of rust-lang#128954 - zachs18:fromresidual-no-default, r=scottmcm
4f09599 Rollup merge of rust-lang#128570 - folkertdev:stabilize-asm-const, r=Amanieu
b6c9e44 add Box::as_ptr and Box::as_mut_ptr methods
23d1309 CommandExt::before_exec: deprecate safety in edition 2024
9858d49 stabilize `is_none_or`
fd2b339 Auto merge of rust-lang#129060 - matthiaskrgr:rollup-s72gpif, r=matthiaskrgr
3b8aab7 Rollup merge of rust-lang#129001 - cblh:fix/128713, r=Noratrieb
16edf69 Rollup merge of rust-lang#128873 - ChrisDenton:windows-targets, r=Mark-Simulacrum
0199b00 Rollup merge of rust-lang#128759 - notriddle:notriddle/spec-to-string, r=workingjubilee,compiler-errors
c6dc243 stabilize `asm_const`
b4bfc21 Rollup merge of rust-lang#129034 - henryksloan:coroutine-must-use, r=joboet
b56fdcb Rollup merge of rust-lang#127857 - tbu-:pr_deprecated_safe_todo, r=petrochenkov
77f462d Rollup merge of rust-lang#122884 - mzabaluev:pow-remove-exit-branch, r=Amanieu
0a6a74b Reduce merged doctest source code size
a83dde6 Mark location doctest as standalone since file information will not work in merged doctest file
7334c71 Auto merge of rust-lang#129046 - matthiaskrgr:rollup-9x4xgak, r=matthiaskrgr
9ed7210 Rollup merge of rust-lang#128745 - dtolnay:spawnunchecked, r=workingjubilee
c39d90e Rollup merge of rust-lang#128655 - joboet:play_with_the_dice, r=ChrisDenton
f81c96a `#[deprecated_safe_2024]`: Also use the `// TODO:` hint in the compiler error
23a1968 Allow to customize `// TODO:` comment for deprecated safe autofix
37017c0 Auto merge of rust-lang#128962 - devnexen:fs_get_mode_haiku, r=workingjubilee
8a2671a Revert to original loop for const pow exponents
c5e8189 Auto merge of rust-lang#128742 - RalfJung:miri-vtable-uniqueness, r=saethlin
ac682f1 Add must_use attribute to Coroutine trait
658904d chore(lib): fmt core::fmt::Formatter's write_fmt method
7eb7376 trying common codepath for every unixes
5fabf93 std::fs: get_mode implementation for haiku.
e3da824 Rollup merge of rust-lang#129017 - its-the-shrimp:core_fmt_from_fn, r=Noratrieb
b247d9a derive(SmartPointer): register helper attributes
aa85448 Explicitly specify type parameter on FromResidual impls in stdlib.
262a4f6 std::fmt::FormatterFn -> std::fmt::FromFn
ceceae3 Rollup merge of rust-lang#128632 - joboet:dont_overwrite_style, r=Amanieu
e8f7afe Rollup merge of rust-lang#128149 - RalfJung:nontemporal_store, r=jieyouxu,Amanieu,Jubilee
7dd2083 chore(lib): Enhance documentation for core::fmt::Formatter's write_fmt method
048efd0 ignore some vtable/fn ptr equality tests in Miri, their result is not fully predictable
a367a12 std: use `/scheme/rand` on Redox
1ca6b42 std: do not overwrite style in `get_backtrace_style`
9147777 Auto merge of rust-lang#128862 - cblh:fix/128855, r=scottmcm
56e1afe Auto merge of rust-lang#126793 - saethlin:mono-rawvec, r=scottmcm
ec7a585 Do not use unnecessary endian conversion.
f48facf Rollup merge of rust-lang#128882 - RalfJung:local-waker-will-wake, r=cuviper
b581949 Rollup merge of rust-lang#120314 - mina86:i, r=Mark-Simulacrum
451feca Fix stability annotation and expand comment
2e34ac3 Hash Ipv*Addr as an integer
b8b61e1 Auto merge of rust-lang#128927 - GuillaumeGomez:rollup-ei2lr0f, r=GuillaumeGomez
44f5b4f Rollup merge of rust-lang#128273 - Voultapher:improve-ord-violation-help, r=workingjubilee
3d7afa0 Update std and compiler
971df1c Stabilize `min_exhaustive_patterns`
c37c666 Add an optimizer hint for the capacity that with_capacity_in returns
c8cbd5c Hoist IS_ZST check out of RawVecInner::from_*_in
e843f71 Polymorphize RawVec
dc39cbf core: optimise Debug impl for ascii::Char
9668691 doc: std::env::var: Returns None for names with '=' or NUL byte
5d5d8bc Rollup merge of rust-lang#128859 - MinxuanZ:mips-sig, r=Amanieu
825def0 Rollup merge of rust-lang#128817 - biabbas:vxworks_update, r=tgross35
6e933a8 make LocalWaker::will_wake consistent with Waker::will_wake
118c712 Fix linkchecker issue
b1460b9 Exclude windows-targets from the workspace
a3a6a98 Add windows-targets crate to std's sysroot
f74940d Rollup merge of rust-lang#128824 - GuillaumeGomez:update-compiler-builtins, r=Amanieu
39b1eaf VxWorks: Add safety comment for vxCpuEnabledGet
8b0a25d fix: Ensure `Guard`'s `drop` method is removed at `opt-level=s` for `Copy` types
c54958c delete space
dadbd58 fix format
7c34ebf [SPARC] fix the name of signal 19 in sparc arch
b75648a [MIPS] fix the name of signal 19 in mips
3840b09 Rollup merge of rust-lang#128818 - RalfJung:std-miri-floats, r=tgross35
d03bb5e Rollup merge of rust-lang#128640 - RalfJung:rwlock-macos-miri, r=joboet
7680a3c Rollup merge of rust-lang#128749 - tgross35:float-inline, r=scottmcm
9df61ad Rollup merge of rust-lang#128306 - WiktorPrzetacznik:WiktorPrzetacznik-nonnull-alignoffset-update, r=Amanieu
39860ad Update compiler-builtins version to 0.1.118
4281185 std float tests: special-case Miri in feature detection
4d6b36a Vxworks: Extern taskNameSet and fix build errors
e24a6ca rwlock: disable 'frob' test in Miri on macOS
c21ba97 Fix VxWorks available parallelism: Move nonzero::uncheked into unsafe block
2495418 Rollup merge of rust-lang#128800 - clarfonthey:core-pattern-type, r=compiler-errors
79cd72a Rollup merge of rust-lang#128691 - tgross35:update-builtins, r=Amanieu
8f84015 Add tracking issue to core-pattern-type
b8f7f38 Stabilize `Ready::into_inner()`
62ccdeb Rollup merge of rust-lang#128261 - clarfonthey:iter-default, r=dtolnay
b4e5330 alloc: make `to_string_str!` a bit less complex
ec74467 Mark `{f32,f64}::{next_up,next_down,midpoint}` inline
b90a026 Rollup merge of rust-lang#128766 - Monadic-Cat:patch-1, r=tgross35
5d7906c Rollup merge of rust-lang#128417 - tgross35:f16-f128-math, r=dtolnay
83d1d16 Trivial grammar fix in const keyword docs
97384fa Update `compiler-builtins` to 0.1.117
6dc79bb Rollup merge of rust-lang#128751 - devnexen:vxworks_set_thread_name, r=tgross35
432425d Rollup merge of rust-lang#128539 - biabbas:deny_unsafe, r=workingjubilee
1bd5338 Rollup merge of rust-lang#128406 - lolbinarycat:bufreader_peek, r=Mark-Simulacrum
e20aa64 Rollup merge of rust-lang#125048 - dingxiangfei2009:stable-deref, r=amanieu
bc13c6c alloc: add ToString specialization for `&&str`
14fe723 std::thread: set_name implementation proposal for vxWorks.
67fa603 Remove unused lifetime parameter from spawn_unchecked
4a3da12 Add a special case for CStr/CString in the improper_ctypes lint
51ec2bb implement BufReader::peek
e6aede2 nontemporal_store: make sure that the intrinsic is truly just a hint
a300df7 WASI fixing unsafe_op_in_unsafe_fn for std::{os, sys}
59436fc std: refactor UNIX random data generation
6fafc6b Apply review comments to PartialOrd section
7850a64 Forbid unsafe_op_in_unsafe_fn in vxworks specific os and sys files
e844eff Add a disclaimer about x86 `f128` math functions
21d297b Update comments for `{f16, f32, f64, f128}::midpoint`
ad27d08 Add `core` functions for `f16` and `f128` that require math routines
c6407b0 Add math functions for `f16` and `f128`
d9b1de5 Add math intrinsics for `f16` and `f128`
3c1586b Hide internal sort module
2188712 Apply review comments
2ebe00a PinCoerceUnsized trait into core
569ab6a CloneToUninit: use a private specialization trait
26874cc Sparkle some attributes over `CloneToUninit` stuff
e8c3718 impl CloneToUninit for Path and OsStr
ef8c591 impl CloneToUninit for str and CStr
65c6173 Update NonNull::align_offset quarantees
b014b0d Improve panic sections for sort*, sort_unstable* and select_nth_unstable*
9bcfe84 Improve panic message and surrounding documentation for Ord violations
7e55abb Okay, I guess I have to give these a different feature name
bdc18e2 impl Default for collection iterators that don't already have it
971aa37 LocalWaker docs: Make long-ago omitted but probably intended changes
c4fdac9 Docs for Waker and LocalWaker: Add cross-refs in comment
9c299bc Implement `debug_more_non_exhaustive`
b405024 Make use of raw strings in `core::fmt::builders`
20e64bd Use is_val_statically_known to optimize pow
05ee322 Explicitly unroll integer pow for small exponents
4cfe24a Optimize integer pow by removing exit branch
7c219da Implement DoubleEnded and ExactSize for Take<Repeat> and Take<RepeatWith>

git-subtree-dir: library
git-subtree-split: febaf22
  • 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.