about summary refs log tree commit diff
path: root/library/alloc/src/rc.rs
AgeCommit message (Collapse)AuthorLines
2023-10-14Auto merge of #116407 - Mark-Simulacrum:bootstrap-bump, r=onur-ozkanbors-3/+3
Bump bootstrap compiler to just-released beta https://forge.rust-lang.org/release/process.html#master-bootstrap-update-t-2-day-tuesday
2023-10-08Bump to latest betaMark Rousskov-2/+2
2023-10-05Add more diagnostic items for clippyJason Newcomb-0/+1
2023-10-03Bump version placeholdersMark Rousskov-1/+1
2023-10-02Use `addr_eq` in `{Arc,Rc}::ptr_eq`Scott McMurray-2/+2
Since it's made for stuff like this (see 106447)
2023-09-28Auto merge of #114041 - nvzqz:nvzqz/shared_from_array, r=dtolnaybors-0/+21
Implement `From<[T; N]>` for `Rc<[T]>` and `Arc<[T]>` Given that `Box<[T]>` already has this conversion, the shared counterparts should also have it.
2023-09-16Auto merge of #114494 - est31:extend_useless_ptr_null_checks, r=jackh726bors-0/+2
Make useless_ptr_null_checks smarter about some std functions This teaches the `useless_ptr_null_checks` lint that some std functions can't ever return null pointers, because they need to point to valid data, get references as input, etc. This is achieved by introducing an `#[rustc_never_returns_null_ptr]` attribute and adding it to these std functions (gated behind bootstrap `cfg_attr`). Later on, the attribute could maybe be used to tell LLVM that the returned pointer is never null. I don't expect much impact of that though, as the functions are pretty shallow and usually the input data is already never null. Follow-up of PR #113657 Fixes #114442
2023-08-22Replace version placeholders with 1.73.0Mark Rousskov-1/+1
2023-08-06Add #[rustc_never_returns_null_ptr] to std functionsest31-0/+2
Add the attribute to standard library functions that are guaranteed to never return null pointers, as their originating data wouldn't allow it.
2023-08-03Fix documentation of Rc as From<Vec<T>>July Tikhonov-3/+3
2023-07-30Rollup merge of #95965 - CAD97:const-weak-new, r=workingjubileeJubilee-1/+1
Stabilize const-weak-new This is a fairly uncontroversial library stabilization, so I'm going ahead and proposing it to ride the trains to stable. This stabilizes the following APIs, which are defined to be non-allocating constructors. ```rust // alloc::rc impl<T> Weak<T> { pub const fn new() -> Weak<T>; } // alloc::sync impl<T> Weak<T> { pub const fn new() -> Weak<T>; } ``` Closes #95091 ``@rustbot`` modify labels: +needs-fcp
2023-07-30Stabilize const-weak-newCAD97-1/+1
Bump its stabilization version several times along the way to accommodate changes in release processes. Co-authored-by: Mara Bos <m-ou.se@m-ou.se> Co-authored-by: Trevor Gross <t.gross35@gmail.com>
2023-07-24Implement `From<[T; N]>` for `Rc<[T]>` and `Arc<[T]>`Nikolai Vazquez-0/+21
2023-07-18Make {Rc,Arc}::allocator associated functionsMike Hommey-2/+6
2023-06-30Add support for allocators in `Rc` and `Arc`Cyborus04-138/+749
2023-06-21Auto merge of #106450 - albertlarsan68:fix-arc-ptr-eq, r=Amanieubors-5/+5
Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadata FCP completed in https://github.com/rust-lang/rust/issues/103763#issuecomment-1362267967 Closes #103763
2023-06-19Introduce `alloc::::UniqueRc`Eric Holk-3/+139
This is an `Rc` that is guaranteed to only have one strong reference. Because it is uniquely owned, it can safely implement `DerefMut`, which allows programs to have an initialization phase where structures inside the `Rc` can be mutated. The `UniqueRc` can then be converted to a regular `Rc`, allowing sharing and but read-only access. During the "initialization phase," weak references can be created, but attempting to upgrade these will fail until the `UniqueRc` has been converted to a regular `Rc`. This feature can be useful to create cyclic data structures. This API is an implementation based on the feedback provided to the ACP at https://github.com/rust-lang/libs-team/issues/90.
2023-06-16remove box_free and replace with drop implDrMeepster-9/+7
2023-05-08Auto merge of #106621 - ozkanonur:enable-elided-lifetimes-for-doctests, ↵bors-1/+1
r=Mark-Simulacrum enable `rust_2018_idioms` lint group for doctests With this change, `rust_2018_idioms` lint group will be enabled for compiler/libstd doctests. Resolves #106086 Resolves #99144 Signed-off-by: ozkanonur <work@onurozkan.dev>
2023-05-07enable `rust_2018_idioms` for doctestsozkanonur-1/+1
Signed-off-by: ozkanonur <work@onurozkan.dev>
2023-04-28replace version placeholdersPietro Albini-1/+1
2023-04-26Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadataAlbert Larsan-5/+5
2023-04-12remove some unneeded importsKaDiWa-12/+10
2023-03-23Stabilize `arc_into_inner` and `rc_into_inner`.Frank Steffahn-3/+3
Includes resolving the FIXMEs in the documentation, and some very minor documentation improvements.
2023-03-15unequal → not equalgimbles-2/+2
2023-03-12Rollup merge of #109026 - joshtriplett:rc-into-inner, r=dtolnayMatthias Krüger-0/+18
Introduce `Rc::into_inner`, as a parallel to `Arc::into_inner` Unlike `Arc`, `Rc` doesn't have the same race condition to avoid, but maintaining an equivalent API still makes it easier to work with both `Rc` and `Arc`.
2023-03-11Introduce `Rc::into_inner`, as a parallel to `Arc::into_inner`Josh Triplett-0/+18
Unlike `Arc`, `Rc` doesn't have the same race condition to avoid, but maintaining an equivalent API still makes it easier to work with both `Rc` and `Arc`.
2023-03-03Match unmatched backticks in library/est31-1/+1
2023-01-29fix typo in {Rc, Arc}::get_mut_unchecked docsy21-1/+1
2023-01-14Remove various double spaces in source comments.André Vennberg-1/+1
2023-01-08Auto merge of #90291 - geeklint:loosen_weak_debug_bound, r=dtolnaybors-1/+1
Loosen the bound on the Debug implementation of Weak. Both `rc::Weak<T>` and `sync::Weak<T>` currently require `T: Debug` in their own `Debug` implementations, but they don't currently use it; they only ever print a fixed string. A general implementation of Debug for Weak that actually attempts to upgrade and rely on the contents is unlikely in the future because it may have unbounded recursion in the presence of reference cycles, which Weak is commonly used in. (This was the justification for why the current implementation [was implemented the way it is](https://github.com/rust-lang/rust/pull/19388/commits/f0976e2cf3f6b0027f118b791e0888b29fbb41a7)). When I brought it up [on the forum](https://internals.rust-lang.org/t/could-the-bound-on-weak-debug-be-relaxed/15504), it was suggested that, even if an implementation is specialized in the future that relies on the data stored within the Weak, it would likely rely on specialization anyway, and could therefore easily specialize on the Debug bound as well.
2022-12-19Update coerce_unsized tracking issue from #27732 to #18598Anders Kaseorg-2/+2
Issue #27732 was closed as a duplicate of #18598. Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2022-11-20Rollup merge of #101310 - zachs18:rc_get_unchecked_mut_docs_soundness, ↵Matthias Krüger-4/+37
r=Mark-Simulacrum Clarify and restrict when `{Arc,Rc}::get_unchecked_mut` is allowed. (Tracking issue for `{Arc,Rc}::get_unchecked_mut`: #63292) (I'm using `Rc` in this comment, but it applies for `Arc` all the same). As currently documented, `Rc::get_unchecked_mut` can lead to unsoundness when multiple `Rc`/`Weak` pointers to the same allocation exist. The current documentation only requires that other `Rc`/`Weak` pointers to the same allocation "must not be dereferenced for the duration of the returned borrow". This can lead to unsoundness in (at least) two ways: variance, and `Rc<str>`/`Rc<[u8]>` aliasing. ([playground link](https://play.rust-lang.org/?version=nightly&mode=debug&edition=2021&gist=d7e2d091c389f463d121630ab0a37320)). This PR changes the documentation of `Rc::get_unchecked_mut` to restrict usage to when all `Rc<T>`/`Weak<T>` have the exact same `T` (including lifetimes). I believe this is sufficient to prevent unsoundness, while still allowing `get_unchecked_mut` to be called on an aliased `Rc` as long as the safety contract is upheld by the caller. ## Alternatives * A less strict, but still sound alternative would be to say that the caller must only write values which are valid for all aliased `Rc`/`Weak` inner types. (This was [mentioned](https://github.com/rust-lang/rust/issues/63292#issuecomment-568284090) in the tracking issue). This may be too complicated to clearly express in the documentation. * A more strict alternative would be to say that there must not be any aliased `Rc`/`Weak` pointers, i.e. it is required that get_mut would return `Some(_)`. (This was also mentioned in the tracking issue). There is at least one codebase that this would cause to become unsound ([here](https://github.com/kaimast/lsm-rs/blob/be5a164d770d850d905e510e2966ad4b1cc9aa5e/src/memtable.rs#L166), where additional locking is used to ensure unique access to an aliased `Rc<T>`; I saw this because it was linked on the tracking issue).
2022-11-18Change undefined-behavior doctests from ignore to no_run.Zachary S-2/+2
2022-11-18Apply suggestions from code review zachs18-1/+1
Fix spelling error.
2022-11-18Add examples to show when `{Arc,Rc}::get_mut_unchecked` is disallowed.Zachary S-0/+32
2022-11-18Clarify and restrict when `{Arc,Rc}::get_mut_unchecked` is allowed.Zachary S-4/+5
2022-11-18Remove Vec/Rc storage reuse optclubby789-53/+6
2022-11-14Reuse `Vec<T>` backing storage for `Rc<[T]>`clubby789-19/+65
Co-authored-by: joboet <jonas.boettiger@icloud.com>
2022-10-26ptr::eq: clarify that comparing dyn Trait is fragileRalf Jung-5/+5
2022-10-21Reduce mutability in std-use of with_metadata_ofAndreas Molzer-1/+1
2022-09-17Fix a typo in docstringmsakuta-1/+1
2022-07-10Use `byte_sub` in [a]rc implMaybe Waffle-6/+5
2022-06-20Rollup merge of #96609 - ibraheemdev:arc-downcast-unchecked, r=m-ou-seDylan DPC-2/+38
Add `{Arc, Rc}::downcast_unchecked` Part of #90850.
2022-05-29Use Box::new() instead of box syntax in alloc testsest31-3/+4
2022-05-05Rollup merge of #95843 - GuillaumeGomez:improve-new-cyclic-doc, r=m-ou-seMatthias Krüger-7/+19
Improve Rc::new_cyclic and Arc::new_cyclic documentation Fixes https://github.com/rust-lang/rust/issues/95672. cc `@CAD97` (since I used your explanations)
2022-05-04Improve Rc::new_cyclic and Arc::new_cyclic documentationGuillaume Gomez-7/+19
2022-05-01add `{Arc, Rc}::downcast_unchecked`Ibraheem Ahmed-2/+38
2022-05-01Auto merge of #96078 - udoprog:refcounted-str-to-u8, r=dtolnaybors-0/+19
Implement str to [u8] conversion for refcounted containers This seems motivated to complete the APIs for shared containers since we already have similar allocation-free conversions for strings like `From<Box<[u8]>> for Box<str>`. Insta-stable since it's a new trait impl?
2022-04-30Bump shared_from_str to Rust 1.62.0David Tolnay-1/+1