Commit graph

10947 commits

Author SHA1 Message Date
David Freese
4813a81432 Add clarification on std::cfg macro docs v. #[cfg] attribute
The wording was discussed, to a limited degree in #71679.  This tries to
address some confusion I as well as someone else had independently when
looking at this macro.

Fixes #71679
2020-04-29 11:50:23 -07:00
Zach Reizner
4b762ec95a
Update link to unstable book for llvm_asm macro 2020-04-27 15:51:51 -07:00
Dylan DPC
cddbed0003
Rollup merge of #71589 - RalfJung:unique-no-shr, r=SimonSapin
remove Unique::from for shared pointer types

r? @SimonSapin
2020-04-27 03:26:18 +02:00
Ralf Jung
7aebdb639a remove Unique::from for shared pointer types 2020-04-26 19:00:57 +02:00
Jonas Platte
4589bd57e9
Fix since attribute for nonzero_bitor impl's 2020-04-26 11:28:44 +02:00
bors
0862458dad Auto merge of #71556 - Dylan-DPC:rollup-9ll4shr, r=Dylan-DPC
Rollup of 7 pull requests

Successful merges:

 - #69041 (proc_macro: Stabilize `Span::resolved_at` and `Span::located_at`)
 - #69813 (Implement BitOr and BitOrAssign for the NonZero integer types)
 - #70712 (stabilize BTreeMap::remove_entry)
 - #71168 (Deprecate `{Box,Rc,Arc}::into_raw_non_null`)
 - #71544 (Replace filter_map().next() calls with find_map())
 - #71545 (Fix comment in docstring example for Error::kind)
 - #71548 (Add missing Send and Sync impls for linked list Cursor and CursorMut.)

Failed merges:

r? @ghost
2020-04-25 17:49:00 +00:00
Dylan DPC
b6e03c464a
Rollup merge of #69813 - thomcc:nonzero-bitor, r=Amanieu
Implement BitOr and BitOrAssign for the NonZero integer types

This provides overloaded operators for `NonZero$Int | NonZero$Int`, `NonZero$Int | $Int`, and `$Int | NonZero$Int`. It also provides `BitOrAssign` where `self` is `NonZero$Int`, for symmetry.

It's a pretty small conceptual addition, but is good becasue but avoids a case where the operation is obviously sound, but you'd otherwise need unsafe to do it.

In crates trying to minimize `unsafe` usage, this is unfortunate and makes working with `NonZero` types often not worth it, even if the operations you're doing are clearly sound.

I've marked these as stable as I've been told in the past that trait impls are automatically stable. I'm happy to change it to unstable if this wasn't correct information.

I'm not entirely confident what version I should have put down, so I followed https://www.whatrustisit.com. Hopefully it's correct for this.

Apologies in advance if this has come up before, but I couldn't find it.
2020-04-25 18:30:24 +02:00
bors
659951c4a0 Auto merge of #71439 - Mark-Simulacrum:stage0-next, r=jonas-schievink
Bump bootstrap compiler

This bumps the bootstrap compiler and the rustfmt that x.py fmt uses.
2020-04-25 14:15:10 +00:00
Mark Rousskov
17a393ee96 Bump rustfmt to most recently shipped 2020-04-25 09:25:33 -04:00
Mark Rousskov
93eed402ad Bump bootstrap compiler 2020-04-25 09:25:33 -04:00
Dylan DPC
a23d8ec8a7
Rollup merge of #71480 - GuillaumeGomez:panic-info-example, r=Dylan-DPC
Improve PanicInfo examples readability

cc @Eijebong

r? @Dylan-DPC
2020-04-25 01:35:57 +02:00
Dylan DPC
08ca447267
Rollup merge of #71476 - RalfJung:miri-test-sizes, r=kennytm
more compact way to adjust test sizes for Miri

Inspired by @dtolnay
2020-04-24 13:14:26 +02:00
Guillaume Gomez
03817ec789 Improve PanicInfo examples readability 2020-04-24 09:46:38 +02:00
Dylan DPC
8a0e88e653
Rollup merge of #71492 - LeSeulArtichaut:document-unsafe-2, r=Mark-Simulacrum
Document unsafety in core::{panicking, alloc::layout, hint, iter::adapters::zip}

Helps with #66219.
r? @Mark-Simulacrum do you want to continue reading safety comments? :D
2020-04-24 02:47:38 +02:00
Dylan DPC
c33deb9fda
Rollup merge of #71068 - pyfisch:unicode-version-stable, r=SimonSapin
Stabilize UNICODE_VERSION (feature unicode_version)

Tracking issue: #49726

r? @sfackler

#71020 changed the definition of `UNICODE_VERSION` just yesterday from a struct to a tuple. Maybe you want to wait some more before stabilizing this constant, on the other hand this is a very small and simple addition.

CC @behnam @SimonSapin @Serentty
2020-04-24 02:47:32 +02:00
Dylan DPC
9ff020e0dd
Rollup merge of #71063 - LeSeulArtichaut:document-unsafe, r=Mark-Simulacrum
Document unsafety in core::{option, hash}

Helps with #66219.
I think that the part that will need reviewing the most is the `hash/sip.rs` file.
r? @LukasKalbertodt (or someone else from the libs team)
2020-04-24 02:47:30 +02:00
LeSeulArtichaut
d515168f3b Document unsafety in core::{panicking, alloc::layout, hint, iter::adapters::zip} 2020-04-24 01:48:48 +02:00
LeSeulArtichaut
a694315ed1 Add a note about fat pointers
Co-Authored-By: Mark-Simulacrum <mark.simulacrum@gmail.com>
2020-04-23 23:05:37 +02:00
Dylan DPC
5f9ffb9c02
Rollup merge of #71470 - TyPR124:fix-doc-links, r=jonas-schievink
Fix doc links

This fixes a few doc links which were causing `cargo doc` to fail when using `--document-private-items --document-hidden-items` on libstd. Most of the fixes are just escaping '[' and ']' characters in doc comments, and one change actually fixes a doc link.
2020-04-23 20:35:06 +02:00
Dylan DPC
199f4deef0
Rollup merge of #71446 - Amanieu:transmute_copy, r=sfackler
Only use read_unaligned in transmute_copy if necessary

I've noticed that this causes LLVM to generate poor code on targets that don't support unaligned memory accesses.
2020-04-23 20:35:04 +02:00
Dylan DPC
1363a4b352
Rollup merge of #71442 - TimDiekmann:allocref-mut-ref, r=Amanieu
Add a "by reference" adaptor for `AllocRef`

Fixes rust-lang/wg-allocators#53

r? @Amanieu
2020-04-23 20:35:02 +02:00
Dylan DPC
2a1cd440f2
Rollup merge of #71404 - cuviper:chain-unfused, r=scottmcm
Don't fuse Chain in its second iterator

Only the "first" iterator is actually set `None` when exhausted,
depending on whether you iterate forward or backward. This restores
behavior similar to the former `ChainState`, where it would transition
from `Both` to `Front`/`Back` and only continue from that side.

However, if you mix directions, then this may still set both sides to
`None`, totally fusing the iterator.

Fixes #71375
r? @scottmcm
2020-04-23 20:34:59 +02:00
Ralf Jung
f1c30519f3 libcore: more compact way to adjust test sizes for Miri 2020-04-23 19:50:24 +02:00
LeSeulArtichaut
3029e9e9e4 Add note about padding
Co-authored-by: Mark-Simulacrum <mark.simulacrum@gmail.com>
2020-04-23 18:32:41 +02:00
Tyler Ruckinger
0ad9a4d26e Make VaList::arg link actually work 2020-04-23 11:06:46 -04:00
Tyler Ruckinger
28847e5c37 Merge branch 'master' into fix-doc-links 2020-04-23 10:47:30 -04:00
Tyler Ruckinger
547219c7e4 Fix doc link errors 2020-04-23 10:40:28 -04:00
Dylan DPC
98cadb28ac
Rollup merge of #71454 - ecstatic-morse:inline-core-ptr-docs, r=RalfJung
Inline some function docs in `core::ptr`

Resolves #64539.
2020-04-23 15:57:18 +02:00
Pyfisch
aa0175c98d Stabilize UNICODE_VERSION (feature unicode_version)
The feature will become stable in Rust 1.45.
Noted that the value of UNICODE_VERSION is expected to change.
2020-04-23 14:36:30 +02:00
Dylan MacKenzie
b3c26de25e Inline some function docs re-exported in std::ptr 2020-04-22 18:01:26 -07:00
Amanieu d'Antras
99de3728f9 Only use read_unaligned in transmute_copy if necessary 2020-04-22 22:22:48 +01:00
Dylan DPC
bb13aab8e5
Rollup merge of #71440 - TimDiekmann:copy-allocerr, r=Amanieu
Implement `Copy` for `AllocErr`

r? @Amanieu
2020-04-22 23:19:25 +02:00
Dylan DPC
10e47f5b7b
Rollup merge of #71256 - cuviper:must_use_replace, r=estebank
Lint must_use on mem::replace

This adds a hint on `mem::replace`, "if you don't need the old value,
you can just assign the new value directly". This is in similar spirit
to the `must_use` on `ManuallyDrop::take`.
2020-04-22 23:19:19 +02:00
Tim Diekmann
e60268076f Add a "by reference" adaptor for AllocRef 2020-04-22 22:51:11 +02:00
Tim Diekmann
863d2d92ba Make AllocErr copyable 2020-04-22 22:40:21 +02:00
Yuki Okushi
f28e3873c5
Rollup merge of #71366 - faern:use-assoc-int-consts3, r=dtolnay
Use assoc int consts3

Define module level int consts with associated constants instead of `min_value()` and `max_value()`. So the code become consistent with what the docs recommend etc. Seems natural.

Also remove the last usages of the int module constants from this repo (except src/test/ directory which I have still not really done anything in). Some places were missed in the previous PRs because the code uses `crate::<IntTy>` to reach the constants.

This is a continuation of #70857

r? @dtolnay
2020-04-22 10:34:06 +09:00
Josh Stone
eeb687f20e Don't fuse Chain in its second iterator
Only the "first" iterator is actually set `None` when exhausted,
depending on whether you iterate forward or backward. This restores
behavior similar to the former `ChainState`, where it would transition
from `Both` to `Front`/`Back` and only continue from that side.

However, if you mix directions, then this may still set both sides to
`None`, totally fusing the iterator.
2020-04-21 14:56:59 -07:00
Dylan DPC
69a528eda6
Rollup merge of #69362 - CAD97:alloc_layout_extras, r=Amanieu
Stabilize most common subset of alloc_layout_extras

Tracking issue: https://github.com/rust-lang/rust/issues/55724

Specifically, this stabilizes:

```rust
pub fn Layout::align_to(&self, align: usize) -> Result<Layout, LayoutErr>;
pub fn Layout::pad_to_align(&self) -> Layout;
pub fn Layout::extend(&self, next: Layout) -> Result<(Layout, usize), LayoutErr>;
pub fn Layout::array<T>(n: usize) -> Result<Layout, LayoutErr>;
```

Methods that are tracked by #55724 but are not stabilized here:

```rust
pub fn Layout::padding_needed_for(&self, align: usize) -> usize;
pub fn Layout::repeat(&self, n: usize) -> Result<(Layout, usize), LayoutErr>;
pub fn Layout::repeat_packed(&self, n: usize) -> Result<Layout, LayoutErr>;
pub fn Layout::extend_packed(&self, next: Layout) -> Result<Layout, LayoutErr>;
```

Combined, these stabilized functions allow code to construct and manipulate `repr(C)` layouts while letting the standard library handle correctness in the face of edge cases. For example use cases, consider the usage in [hashbrown](2f2af1d/src/raw/mod.rs (L143)), [crossbeam-skiplist](https://github.com/crossbeam-rs/crossbeam-skiplist/blob/master/src/base.rs#L99), [pointer-utils/slice-dst](92aeefeed9/crates/slice-dst/src/layout_polyfill.rs), and of course the standard library itself.

Providing a higher-level API such as `Layout::repr_c<const N: usize>(fields: [Layout; N]) -> Result<(Layout, [usize; N]), LayoutErr>` is blocked on const generics, which are a ways off. Providing an API that doesn't provide offsets would be quite suboptimal, as the reason for calculating the layout like this rather than `Layout::new` is to get the field offsets.

The primary issue with the current API is having to call `.pad_to_align()` to match the layout of a `repr(C)` struct. However, I think this is not just a (failing? limitation?) of the API, but rather intrinsic complexity. While all Rust-defined types have size==stride, and probably will for the foreseeable future, there is no inherent reason why this is a limitation of all allocations. As such, the `Layout` manipulation APIs shouldn't impose this limitation, and instead the higher level api of `repr_c` (or just plain old using `Layout::new`) can make keeping it simple.

cc @matklad r? @rust-lang/libs
2020-04-21 00:30:53 +02:00
Linus Färnstrand
6850e4a1ae Use assoc float consts instead of module level 2020-04-20 23:38:06 +02:00
Linus Färnstrand
4ddf66187a Define module level int consts from assoc consts 2020-04-20 23:38:06 +02:00
Linus Färnstrand
9fc0833235 Stop accessing module level int consts via crate::<Ty> 2020-04-20 23:38:06 +02:00
CAD97
98f0a8241b Improve Layout::extend docs 2020-04-20 12:30:35 -04:00
Christopher Durham
9c3adaf89c
Update src/libcore/alloc/layout.rs
Co-Authored-By: Amanieu d'Antras <amanieu@gmail.com>
2020-04-20 12:28:30 -04:00
Dylan DPC
b921587c91
Rollup merge of #71334 - ehuss:pattern-docs, r=kennytm
Update pattern docs.

A few changes to help clarify string pattern usage:

* Add some examples and stability information in the `pattern` module.
* Fixes the links at https://doc.rust-lang.org/std/str/pattern/ because intra-doc-links don't work with re-exported modules (#65983 I think?).
* Consistently use the same phrasing for `str` methods taking a pattern.
    * Also mention that array of `char` is also accepted.

When `Pattern` is stabilized, the phrasing in the `str` methods can be updated to be more general to reflect the exact behavior. I'm reluctant to do this now because the stability story for `Pattern` is uncertain. It may perhaps look something like:

> The pattern can be any type that implements the [`Pattern`] trait. Notable examples are `&str`, [`char`], arrays of [`char`], or functions or closures that determines if a character matches. Additional libraries might provide more complex patterns like regular expressions.

This is complicated because methods like `trim_matches` have bounds, which for example don't support `str`, so those methods may need more elaboration.
2020-04-20 18:07:12 +02:00
bors
9b2f8dbba3 Auto merge of #71007 - Amanieu:deprecate_asm, r=Mark-Simulacrum
Deprecate the asm! macro in favor of llvm_asm!

Since we will be changing the syntax of `asm!` soon, deprecate it and encourage people to use `llvm_asm!` instead (which preserves the old syntax). This will avoid breakage when `asm!` is changed.

RFC: https://github.com/rust-lang/rfcs/pull/2843
2020-04-20 02:18:00 +00:00
Eric Huss
ca61fd5636 Update pattern docs. 2020-04-19 17:19:12 -07:00
Dylan DPC
7cdcc876a5
Rollup merge of #71315 - huangjiahua:update-documentation, r=Dylan-DPC
Add example in the alternative in std::mem::transmute docs

It is safer to use `from_ne_bytes` to convert raw bytes to type like u32.  #71187
2020-04-19 15:12:40 +02:00
huangjiahua
1a1863b815 Add example in the alternative in std::mem::transmute docs
It is safer to use `from_ne_bytes` to convert raw bytes to type like u32.
2020-04-18 14:58:38 +08:00
CAD97
a01b00faf8 Clarify layout information in Layout::extend 2020-04-17 18:59:36 -04:00
Dylan DPC
d5d9bf0406
Rollup merge of #71167 - RalfJung:big-o, r=shepmaster
big-O notation: parenthesis for function calls, explicit multiplication

I saw `O(n m log n)` in the docs and found that really hard to parse. In particular, I don't think we should use blank space as syntax for *both* multiplication and function calls, that is just confusing.

This PR makes both multiplication and function calls explicit using Rust-like syntax. If you prefer, I can also leave one of them implicit, but I believe explicit is better here.

While I was at it I also added backticks consistently.
2020-04-17 23:56:00 +02:00