Commit graph

11298 commits

Author SHA1 Message Date
Manish Goregaokar
a364c0a782
Rollup merge of #74228 - estebank:unsized-param, r=davidtwco
Provide structured suggestion on unsized fields and fn params

* Suggest borrowing or boxing unsized fields
* Suggest borrowing fn parameters
* Remove some verbosity of unsized errors
* Remove `on_unimplemented` note from `trait Sized`

Fix #23286, fix #28653.

r? @davidtwco
2020-07-14 13:19:24 -07:00
Esteban Küber
b7db6bb5af Remove Sized on_unimplemented note 2020-07-14 10:50:24 -07:00
Manish Goregaokar
e8703e88fc
Rollup merge of #74296 - Lynoure:rfind-doc-improvement, r=hanna-kruppe
Clarify the description for rfind

Changes the wording in rfind description to be clearer and the example code to illustrate the difference between
find and rfind
2020-07-14 07:39:13 -07:00
Manish Goregaokar
79894dfbac
Rollup merge of #73986 - RalfJung:raw-slice-as-ptr, r=sfackler
add (unchecked) indexing methods to raw (and NonNull) slices

This complements the existing (unstable) `len` method. Unfortunately, for non-null slices, we cannot call this method `as_ptr` as that overlaps with the existing method of the same name.

If this looks reasonable to accept, I propose to reuse the https://github.com/rust-lang/rust/issues/71146 tracking issue and rename the feature get to `slice_ptr_methods` or so.

Cc @SimonSapin
Fixes https://github.com/rust-lang/rust/issues/60639
2020-07-14 07:39:00 -07:00
bors
c724b67e1b Auto merge of #73490 - CAD97:range-unchecked-stepping, r=Amanieu
Use step_unchecked more liberally in range iter impls

Without these `_unchecked`, these operations on iterators of `char` fail to optimize out the unreachable panicking condition on overflow.

cc @cuviper https://github.com/rayon-rs/rayon/pull/771 where this was discovered.
2020-07-14 08:56:06 +00:00
Lynoure Braakman
d27e7d04a1 Clarify the description for rfind
Changes the example code to illustrate the difference between
find and rfind
2020-07-13 17:41:27 +02:00
Ralf Jung
ff5e1078fc assign tracking issue 2020-07-12 12:48:43 +02:00
Manish Goregaokar
1979fa86f9
Rollup merge of #74066 - thomcc:optimize-is-ascii, r=nagisa
Optimize is_ascii for str and [u8].

This optimizes the `is_ascii` function for `[u8]` and `str`. I've been surprised this wasn't done for a while, so I just did it.

Benchmarks comparing before/after look like:

```
test ascii::long_readonly::is_ascii_slice_iter_all              ... bench:         174 ns/iter (+/- 79) = 40172 MB/s
test ascii::long_readonly::is_ascii_slice_libcore               ... bench:          16 ns/iter (+/- 5) = 436875 MB/s
test ascii::medium_readonly::is_ascii_slice_iter_all            ... bench:          12 ns/iter (+/- 3) = 2666 MB/s
test ascii::medium_readonly::is_ascii_slice_libcore             ... bench:           2 ns/iter (+/- 0) = 16000 MB/s
test ascii::short_readonly::is_ascii_slice_iter_all             ... bench:           3 ns/iter (+/- 0) = 2333 MB/s
test ascii::short_readonly::is_ascii_slice_libcore              ... bench:           4 ns/iter (+/- 0) = 1750 MB/s
```

(Taken on a x86_64 macbook 2.9 GHz Intel Core i9 with 6 cores)

Where `is_ascii_slice_iter_all` is the old version, and `is_ascii_slice_libcore` is the new.

I tried to document the code well, so hopefully it's understandable. It has fairly exhaustive tests ensuring size/align doesn't get violated -- because `miri` doesn't really help a lot for this sort of code right now, I tried to `debug_assert` all the safety invariants I'm depending on. (Of course, none of them are required for correctness or soundness -- just allows us to test that this sort of pointer manipulation is sound and such).

Anyway, thanks. Let me know if you have questions/desired changes.
2020-07-11 08:53:16 -07:00
Manish Goregaokar
90f1d724c8
Rollup merge of #72920 - oli-obk:const_transmute, r=RalfJung
Stabilize `transmute` in constants and statics but not const fn

cc #53605 (leaving issue open so we can add `transmute` to `const fn` later)

Previous attempt: #64011

r? @RalfJung

cc @rust-lang/wg-const-eval
2020-07-11 08:53:06 -07:00
Oliver Scherer
dd872be5da Stabilize transmute in constants and statics but not const fn 2020-07-11 09:22:17 +02:00
Manish Goregaokar
d2f8c30951
Rollup merge of #74127 - tamird:allowlist, r=oli-obk
Avoid "whitelist"

Other terms are more inclusive and precise.
2020-07-10 23:26:47 -07:00
Manish Goregaokar
efda2b58b0
Rollup merge of #73887 - DutchGhost:master, r=oli-obk
stabilize const mem::forget

Stabilizes const `mem::forget` as implemented in https://github.com/rust-lang/rust/pull/69617 and tracked in https://github.com/rust-lang/rust/issues/69616.

Closes https://github.com/rust-lang/rust/issues/69616
2020-07-10 23:26:28 -07:00
Manish Goregaokar
d82588b45a
Rollup merge of #72303 - yoshuawuyts:future-poll-fn, r=dtolnay
Add core::future::{poll_fn, PollFn}

This is a sibling PR to #70834, adding `future::poll_fn`. This is a small helper function that helps bridge the gap between "poll state machines" and "async/await". It was first introduced in [futures@0.1.7](https://docs.rs/futures/0.1.7/futures/future/fn.poll_fn.html) in December of 2016, and has been tried and tested as part of the ecosystem for the past 3.5 years.

## Implementation

Much of the same reasoning from #70834 applies: by returning a concrete struct rather than an `async fn` we get to mark the future as `Unpin`. It also becomes named which allows storing it in structs without boxing. This implementation has been modified from the implementation in `futures-rs`.

## References
- [`futures::future::poll_fn`](https://docs.rs/futures/0.3.5/futures/future/fn.poll_fn.html)
- [`async_std::future::poll_fn`](https://docs.rs/async-std/1.5.0/async_std/future/fn.poll_fn.html)
2020-07-10 23:26:24 -07:00
Tamir Duberstein
62cf767a4a
Avoid "whitelist"
Other terms are more inclusive and precise.
2020-07-10 07:39:28 -04:00
Manish Goregaokar
5fc46fa9d2
Rollup merge of #73292 - poliorcetics:fix-link-in-partialeq, r=Dylan-DPC
Fixing broken link for the Eq trait

Fixes #73233.
2020-07-09 11:50:17 -07:00
pierwill
7610ab36f8
Expand abbreviation in core::ffi description 2020-07-06 14:30:37 -07:00
Thom Chiovoloni
a150dcc872 Remove pointless black_box call, add a comment about the unaligned_ benches, and clean up stray semicolon 2020-07-06 07:43:38 -07:00
Manish Goregaokar
e62436333e
Rollup merge of #74064 - RalfJung:variant-count-bootstrap, r=kennytm
variant_count: avoid incorrect dummy implementation

This also avoids a stage 0 doctest failure.
2020-07-05 16:07:39 -07:00
Thom Chiovoloni
dc4a644980 Add 'unrolled' is_ascii_align_to benchmark, and move is_ascii benchmarks into own file 2020-07-05 15:52:13 -07:00
Thom Chiovoloni
13e380d798 Benchmark the unaligned case for is_ascii, and add missing SAFETY 2020-07-05 14:51:05 -07:00
Thom Chiovoloni
e1d4db6055 Add benchmark for slice is_ascii using align_to 2020-07-05 14:33:27 -07:00
Thom Chiovoloni
63e2e2e326 Avoid vec! allocation in is_ascii_slice_* benches 2020-07-05 10:23:50 -07:00
Thom Chiovoloni
980d8e1a0b Optimize is_ascii for &str and &[u8] 2020-07-05 10:23:50 -07:00
Ralf Jung
5f5c98bd8a add (unchecked) indexing methods to raw pointers and NonNull 2020-07-05 19:15:30 +02:00
Ralf Jung
90580c7b0e make unchecked slice indexing helper methods use raw pointers 2020-07-05 19:05:55 +02:00
Ralf Jung
3b1d5e6d79 call the mut version as_mut_ptr and also add an as_ptr-like method to NonNull slices 2020-07-05 18:41:29 +02:00
Ralf Jung
c478b5473d add as_ptr method to raw slices 2020-07-05 18:41:29 +02:00
Ralf Jung
9cb1ffdd4f variant_count: avoid incorrect dummy implementation 2020-07-05 18:12:21 +02:00
Ivan Tham
bc0d619325
Fix spacing in Iterator fold doc 2020-07-05 15:23:42 +08:00
Bastian Kauschke
3ed320e87c
fix typo 2020-07-03 17:21:20 +02:00
Manish Goregaokar
4f536f2c36
Rollup merge of #73938 - nbdd0121:checked_opt, r=nagisa
Optimise fast path of checked_ops with `unlikely`

This PR marks paths returning `None` in checked_ops as unlikely to improvde codegen.

Fixes #73731
2020-07-02 00:16:41 -07:00
Manish Goregaokar
dc762cea33
Rollup merge of #73684 - richkadel:llvm-coverage-map-gen-2, r=wesleywiser
add spans to injected coverage counters, extract with CoverageData query

This is the next iteration on the Rust Coverage implementation, and follows PR #73488

@tmandry @wesleywiser

I came up with an approach for coverage spans, pushing them through the Call terminator as additional args so they can be extracted by the CoverageData query.

I'm using an IndexVec to store them in CoverageData such that there can be only one per index (even if parts of the MIR get duplicated during optimization).

If this approach works for you, I can quickly expand on this to build a separate IndexVec for counter expressions, using a separate call that will be ignored during code generation, but from which I can extract the counter expression values.

Let me know your thoughts. Thanks!

r? @tmandry

Rust compiler MCP rust-lang/compiler-team#278
Relevant issue: #34701 - Implement support for LLVMs code coverage instrumentation
2020-07-02 00:16:30 -07:00
Manish Goregaokar
500634bf10
Rollup merge of #73622 - LeSeulArtichaut:unsafe-libcore, r=nikomatsakis
Deny unsafe ops in unsafe fns in libcore

After `liballoc`, It's time for `libcore` :D

I planned to do this bit by bit to avoid having a big chunk of diffs, so to make reviews easier, and to make the unsafe blocks narrower and take the time to document them properly.

r? @nikomatsakis cc @RalfJung
2020-07-02 00:16:28 -07:00
Manish Goregaokar
63d392e44f
Rollup merge of #73414 - lzutao:slice_strip, r=dtolnay
Implement `slice_strip` feature

Tracking issue: #73413
2020-07-02 00:16:24 -07:00
Gary Guo
86d8644c1b Optimise fast path of checked_ops with unlikely 2020-07-01 20:06:22 +01:00
Manish Goregaokar
affd950ed2
Rollup merge of #73846 - pierwill:pierwill-patch-2, r=joshtriplett
Fix comma in debug_assert! docs
2020-07-01 07:43:00 -07:00
Manish Goregaokar
ec41d01d4f
Rollup merge of #73778 - nbdd0121:const_likely, r=oli-obk
Make `likely` and `unlikely` const, gated by feature `const_unlikely`

This PR also contains a fix to allow `#[allow_internal_unstable]` to work properly with `#[rustc_const_unstable]`.

cc @RalfJung @nagisa

r? @oli-obk
2020-07-01 07:42:52 -07:00
Lzu Tao
cd9d8334bd Implement slice_strip feature 2020-07-01 12:36:42 +00:00
Adam Perry
f07d10db7c Stabilize #[track_caller].
Does not yet make its constness stable, though. Use of
`Location::caller` in const contexts is still gated by
`#![feature(const_caller_location)]`.
2020-06-30 22:22:32 -07:00
LeSeulArtichaut
a1623ff3b6 Deny unsafe ops in unsafe fns, part 6
And final part!!!
2020-06-30 19:28:51 +02:00
LeSeulArtichaut
b3652337a9 Deny unsafe ops in unsafe fns, part 5 2020-06-30 17:37:53 +02:00
LeSeulArtichaut
c68f478131 Deny unsafe ops in unsafe fns, part 4 2020-06-30 17:06:33 +02:00
LeSeulArtichaut
ac7539c6d1 Deny unsafe ops in unsafe fns, part 3 2020-06-30 17:06:16 +02:00
LeSeulArtichaut
8a515e963c Deny unsafe ops in unsafe fns, part 2 2020-06-30 16:42:58 +02:00
LeSeulArtichaut
8ee1dec77b Deny unsafe ops in unsafe fns, part 1 2020-06-30 16:42:57 +02:00
Dodo
a065096ff4 stabilize const mem::forget 2020-06-30 11:34:27 +02:00
Rich Kadel
5239a68e72 add spans to injected coverage counters
added regions with counter expressions and counters.

Added codegen_llvm/coverageinfo mod for upcoming coverage map

Move coverage region collection to CodegenCx finalization

Moved from `query coverageinfo` (renamed from `query coverage_data`),
as discussed in the PR at:

https://github.com/rust-lang/rust/pull/73684#issuecomment-649882503

Address merge conflict in MIR instrument_coverage test

The MIR test output format changed for int types.

moved debug messages out of block.rs

This makes the block.rs calls to add coverage mapping data to the
CodegenCx much more concise and readable.

move coverage intrinsic handling into llvm impl

I realized that having half of the coverage intrinsic handling in
`rustc_codegen_ssa` and half in `rustc_codegen_llvm` meant that any
non-llvm backend would be bound to the same decisions about how the
coverage-related MIR terminators should be handled.

To fix this, I moved the non-codegen portion of coverage intrinsic
handling into its own trait, and implemented it in `rustc_codegen_llvm`
alongside `codegen_intrinsic_call`.

I also added the (required?) stubs for the new intrinsics to
`IntrepretCx::emulate_intrinsic()`, to ensure calls to this function do
not fail if called with these new but known intrinsics.

address PR Feedback on 28 June 2020 2:48pm PDT
2020-06-29 12:31:25 -07:00
bors
c86039b333 Auto merge of #73032 - yoshuawuyts:stabilize-leading_trailing_ones, r=Amanieu
stabilize leading_trailing_ones

This PR stabilizes the `leading_trailing_ones` feature. It's been available on nightly since the start of the year, and hasn't had any issues since. It seems unlikely we'll want to change this, so following up on @djc's suggestion in https://github.com/rust-lang/rust/issues/57969#issuecomment-638405264 I'd like to put forward this PR to stabilize the feature and make it part of `1.46.0`. Thanks!

cc/ @djc @rust-lang/libs
2020-06-29 00:43:19 +00:00
bors
c977b8775d Auto merge of #72437 - ecstatic-morse:stabilize-const-if-match, r=oli-obk
Stabilize `#![feature(const_if_match)]`

Quoting from the [stabilization report](https://github.com/rust-lang/rust/issues/49146#issuecomment-616301045):

> `if` and `match` expressions as well as the short-circuiting logic operators `&&` and `||` will become legal in all [const contexts](https://doc.rust-lang.org/reference/const_eval.html#const-context). A const context is any of the following:
>
> - The initializer of a `const`, `static`, `static mut` or enum discriminant.
> - The body of a `const fn`.
> - The value of a const generic (nightly only).
> - The length of an array type (`[u8; 3]`) or an array repeat expression (`[0u8; 3]`).
>
> Furthermore, the short-circuiting logic operators will no longer be lowered to their bitwise equivalents (`&` and `|` respectively) in `const` and `static` initializers (see #57175). As a result, `let` bindings can be used alongside short-circuiting logic in those initializers.

Resolves #49146.

Ideally, we would resolve 🐳 #66753 before this lands on stable, so it might be worth pushing this back a release. Also, this means we should get the process started for #52000, otherwise people will have no recourse except recursion for iterative `const fn`.

r? @oli-obk
2020-06-28 20:47:52 +00:00
Dylan MacKenzie
5bed94cda4 Remove uses of const_loop in rustc 2020-06-28 10:08:11 -07:00