Commit Graph

83980 Commits

Author SHA1 Message Date
Pietro Albini
4ceeec09ef
Rollup merge of #54557 - michaelwoerister:dont-auto-share-generics-for-incr-comp, r=alexcrichton
incr.comp.: Don't automatically enable -Zshare-generics for incr. comp. builds.

So far the compiler would automatically enable sharing of monomorphizations for incremental builds. That was OK because without (Thin)LTO this could have very little impact on the runtime performance of the generated code. However, since https://github.com/rust-lang/rust/pull/53673, ThinLTO and incr. comp. can be combined, so the trade-off is not as clear anymore.

This PR removes the automatic tie between the two options. Whether monomorphizations are shared between crates or not now _only_ depends on the optimization level.

r? @alexcrichton
2018-09-25 22:34:50 +02:00
Pietro Albini
bd217b62f6
Rollup merge of #54539 - GuillaumeGomez:fix-js-error, r=QuietMisdreavus
Fix js error

r? @QuietMisdreavus
2018-09-25 22:34:48 +02:00
Pietro Albini
6a0f45b3f4
Rollup merge of #54537 - sdroege:chunks-exact, r=alexcrichton
Rename slice::exact_chunks() to slice::chunks_exact()

See https://github.com/rust-lang/rust/issues/47115#issuecomment-403090815
and https://github.com/rust-lang/rust/issues/47115#issuecomment-424053547
2018-09-25 22:34:47 +02:00
Pietro Albini
49e0049e9f
Rollup merge of #54529 - michaelwoerister:dont-unwind-test, r=alexcrichton
aarch64-pc-windows-msvc: Don't link libpanic_unwind to libtest.

This implements the suggestion from https://github.com/rust-lang/rust/issues/54190#issuecomment-422904437 in order to unbreak bootstrapping for the `aarch64-pc-windows-msvc` target. With this applied and using MSVC 15.8.3 for linking the bootstrap actually works and I can cross-compile a hello-world program.

r? @alexcrichton
2018-09-25 22:34:46 +02:00
Pietro Albini
9ea345d9d0
Rollup merge of #54522 - gardrek:patch-1, r=TimNN
Fixed three small typos.
2018-09-25 22:34:44 +02:00
Pietro Albini
cf3c385fef
Rollup merge of #54518 - petrochenkov:regr130, r=alexcrichton
resolve: Do not block derive helper resolutions on single import resolutions

Derive helpers currently conflict with anything else, so if some resolution from a single import appears later, it will result in error anyway.

Fixes https://github.com/rust-lang/rust/issues/54471 (stable-to-beta regression)

r? @ghost
2018-09-25 22:34:43 +02:00
Pietro Albini
4720126c16
Rollup merge of #54498 - sylvestre:patch-1, r=frewsxcv
The project moved under the Mozilla umbrella
2018-09-25 22:34:42 +02:00
Pietro Albini
d2f9e666bf
Rollup merge of #54368 - GuillaumeGomez:reduce-side-padding, r=QuietMisdreavus
Reduce code block sides padding

Fixes #42013.

<img width="1440" alt="screen shot 2018-09-19 at 22 58 32" src="https://user-images.githubusercontent.com/3050060/45781266-c6525680-bc5f-11e8-8eb0-98fc4c22a96e.png">

r? @QuietMisdreavus
2018-09-25 22:34:41 +02:00
Pietro Albini
888a0348fb
Rollup merge of #54281 - GuillaumeGomez:search-box, r=QuietMisdreavus
Search box

Follow up of #54244.

r? @QuietMisdreavus

<img width="1440" alt="screen shot 2018-09-16 at 21 23 05" src="https://user-images.githubusercontent.com/3050060/45600056-cbf93380-b9f6-11e8-904a-d76ddbc5ed69.png">
2018-09-25 22:34:39 +02:00
Pietro Albini
b940e1d961
Rollup merge of #54058 - Kerollmops:slice-dedup, r=shepmaster
Introduce the partition_dedup/by/by_key methods for slices

This PR propose to add three methods to the slice type, the `partition_dedup`, `partition_dedup_by` and `partition_dedup_by_key`. The two other methods are based on `slice::partition_dedup_by`.

These methods take a mutable slice, deduplicates it and moves all duplicates to the end of it, returning two mutable slices, the first containing the deduplicated elements and the second all the duplicates unordered.

```rust
let mut slice = [1, 2, 2, 3, 3, 2];

let (dedup, duplicates) = slice.partition_dedup();

assert_eq!(dedup, [1, 2, 3, 2]);
assert_eq!(duplicates, [3, 2]);
```

The benefits of adding these methods is that it is now possible to:
  - deduplicate a slice without having to allocate and possibly clone elements on the heap, really useful for embedded stuff that can't allocate for example.
  - not loose duplicate elements, because, when using `Vec::dedup`, duplicates elements are dropped. These methods add more flexibillity to the user.

Note that this is near a copy/paste of the `Vec::dedup_by` function, once this method is stable the goal is to replace the algorithm in `Vec` by the following.

```rust
pub fn Vec::dedup_by<F>(&mut self, same_bucket: F)
    where F: FnMut(&mut T, &mut T) -> bool
{
    let (dedup, _) = self.as_mut_slice().partition_dedup_by(same_bucket);
    let len = dedup.len();
    self.truncate(len);
}
```
2018-09-25 22:34:38 +02:00
Pietro Albini
707c9795ac
Rollup merge of #53518 - phungleson:fix-impl-from-for-convert, r=frewsxcv
Add doc for impl From in char_convert

As part of issue #51430 (cc @skade).

The impl is very simple, let me know if we need to go into any details.
2018-09-25 22:34:37 +02:00
Vadim Petrochenkov
ee05f6eef4 resolve: Do not block derive helper resolutions on single import resolutions
Derive helpers conflict currently conflict with anything else, so if some resolution from a single import appears later, it will result in error anyway
2018-09-25 22:20:21 +03:00
bors
31789a658b Auto merge of #54411 - cramertj:await-keyword-error, r=nikomatsakis
Make "await" a pseudo-edition keyword

This change makes "await" ident an error in 2018 edition without async_await
feature and adds "await" to the 2018 edition keyword lint group that
suggest migration on the 2015 edition.

cc https://github.com/rust-lang/rust/issues/53834

r? @nikomatsakis
2018-09-25 15:20:10 +00:00
Michael Woerister
8fc7b5d12b incr.comp.: Don't automatically enable -Zshare-generics for incr.comp. builds. 2018-09-25 17:06:18 +02:00
Son
992e220935 Add examples for doc 2018-09-25 21:59:58 +10:00
bors
ae366637fe Auto merge of #54430 - adrian-budau:master, r=alexcrichton
Update musl to 1.1.20.

This fixes #54429
2018-09-25 09:33:00 +00:00
bors
e7416d5650 Auto merge of #54317 - Centril:feature/dbg_macro, r=SimonSapin
Implement the dbg!(..) macro

Implements the `dbg!(..)` macro due to #54306.
cc https://github.com/rust-lang/rfcs/pull/2361

r? @alexcrichton
2018-09-25 07:06:15 +00:00
Sebastian Dröge
068c92b2cc Also rename ExactChunks iterator name to ChunksExact 2018-09-25 08:56:48 +03:00
bors
287187230b Auto merge of #53693 - scottmcm:marker-trait-attribute, r=nikomatsakis
Support an explicit annotation for marker traits

From the tracking issue for rust-lang/rfcs#1268:
> It seems obvious that we should make a `#[marker]` annotation. ~ https://github.com/rust-lang/rust/issues/29864#issuecomment-368959441

This PR allows you to put `#[marker]` on a trait, at which point:
- [x] The trait must not have any items ~~All of the trait's items must have defaults~~
- [x] Any impl of the trait must be empty (not override any items)
- [x] But impls of the trait are allowed to overlap

r? @nikomatsakis
2018-09-25 03:42:46 +00:00
bors
3a2190a9cd Auto merge of #53438 - matthewjasper:permissive-match-access, r=pnkfelix
[NLL] Be more permissive when checking access due to Match

Partially addresses #53114. notably, we should now have parity with AST borrowck. Matching on uninitialized values is still forbidden.

* ~~Give fake borrows for match their own `BorrowKind`~~
* ~~Allow borrows with this kind to happen on values that are already mutably borrowed.~~
* ~~Track borrows with this type even behind shared reference dereferences and consider all accesses to be deep when checking for conflicts with this borrow type. See [src/test/ui/issues/issue-27282-mutate-before-diverging-arm-3.rs](cb5c989598 (diff-a2126cd3263a1f5342e2ecd5e699fbc6)) for an example soundness issue this fixes (a case of #27282 that wasn't handled correctly).~~
* Create a new `BorrowKind`: `Shallow` (name can be bike-shed)
* `Shallow` borrows differ from shared borrows in that
  * When we check for access we treat them as a `Shallow(Some(_))` read
  * When we check for conflicts with them, if the borrow place is a strict prefix of the access place then we don't consider that a conflict.
    * For example, a `Shallow` borrow of `x` does not conflict with any access or borrow of `x.0` or `*x`
* Remove the current fake borrow in matches.
* When building matches, we take a `Shallow` borrow of any `Place` that we switch on or bind in a match, and any prefix of those places. (There are some optimizations where we do fewer borrows, but this shouldn't change semantics)
  * `match x { &Some(1) => (),  _ => (), }` would `Shallow` borrow `x`, `*x` and `(*x as Some).0` (the `*x` borrow is unnecessary, but I'm not sure how easy it would be to remove.)
* Replace the fake discriminant read with a `ReadForMatch`.
* Change ReadForMatch to only check for initializedness (to prevent `let x: !; match x {}`), but not conflicting borrows. It is still considered a use for liveness and `unsafe` checking.
* Give special cased error messages for this kind of borrow.

Table from the above issue after this PR

| Thing | AST | MIR | Want | Example |
| --- | --- | --- | --- |---|
| `let _ = <unsafe-field>` | 💚  | 💚  |  |  [playground](https://play.rust-lang.org/?gist=bb7843e42fa5318c1043d04bd72abfe4&version=nightly&mode=debug&edition=2015) |
| `match <unsafe_field> { _ => () }` |   |  |  | [playground](https://play.rust-lang.org/?gist=3e3af05fbf1fae28fab2aaf9412fb2ea&version=nightly&mode=debug&edition=2015) |
| `let _ = <moved>` | 💚  | 💚 | 💚 | [playground](https://play.rust-lang.org/?gist=91a6efde8288558e584aaeee0a50558b&version=nightly&mode=debug&edition=2015) |
| `match <moved> { _ => () }` |  |   | 💚 | [playground](https://play.rust-lang.org/?gist=804f8185040b2fe131f2c4a64b3048ca&version=nightly&mode=debug&edition=2015) |
| `let _ = <borrowed>` | 💚  | 💚 | 💚 | [playground](https://play.rust-lang.org/?gist=0e487c2893b89cb772ec2f2b7c5da876&version=nightly&mode=debug&edition=2015) |
| `match <borrowed> { _ => () }` | 💚  | 💚 | 💚 | [playground](https://play.rust-lang.org/?gist=0e487c2893b89cb772ec2f2b7c5da876&version=nightly&mode=debug&edition=2015) |

r? @nikomatsakis
2018-09-25 01:04:12 +00:00
Matthew Jasper
a830732090 Rename places_conflict to borrow_conflicts_with_place
This name better reflects the asymmetry of this function.
2018-09-24 23:33:13 +01:00
Matthew Jasper
531e98a0d8 Update mir opt tests 2018-09-24 23:33:13 +01:00
Matthew Jasper
f71f733d48 Add a MIR transform to remove fake reads
As we are now creating borrows of places that may not be valid for
borrow checking matches, these have to be removed to avoid generating
broken code.
2018-09-24 23:33:13 +01:00
Matthew Jasper
1a6ed0271e Update ui tests 2018-09-24 23:33:13 +01:00
Matthew Jasper
c5047cb494 Add tests for new match borrows 2018-09-24 23:33:13 +01:00
Matthew Jasper
46e247bcec Don't check for conflicting borrows of ReadForMatches 2018-09-24 23:33:13 +01:00
Matthew Jasper
a6fad3f620 Add more fake borrows to matches 2018-09-24 23:33:13 +01:00
Matthew Jasper
b55bb2e918 Better messages for errors from Shallow borrows 2018-09-24 23:33:13 +01:00
Matthew Jasper
ced5c2d08a Add "Shallow" borrow kind
This allows treating the "fake" match borrows differently from shared
borrows.
2018-09-24 23:33:13 +01:00
bors
5c875d9385 Auto merge of #54416 - christianpoveda:master, r=wesleywiser
Extend MIR inlining to all operand variants

This fixes https://github.com/rust-lang/rust/issues/54193
r? @eddyb
2018-09-24 20:07:44 +00:00
Taylor Cramer
fb14662e74 Make "await" a pseudo-edition keyword
This change makes "await" ident an error in 2018 edition without async_await
feature and adds "await" to the 2018 edition keyword lint group that
suggest migration on the 2015 edition.
2018-09-24 13:07:19 -07:00
Guillaume Gomez
827047c18b Fix JS error 2018-09-24 22:05:12 +02:00
Sebastian Dröge
e09e45041b Rename slice::exact_chunks() to slice::chunks_exact()
See https://github.com/rust-lang/rust/issues/47115#issuecomment-403090815
and https://github.com/rust-lang/rust/issues/47115#issuecomment-424053547
2018-09-24 22:43:06 +03:00
bors
70073ec61d Auto merge of #53783 - RalfJung:ptr-docs, r=alexcrichton
Rewrite docs for pointer methods

This takes over https://github.com/rust-lang/rust/pull/51016 by @ecstatic-morse. They did most of the work, I just did some editing.

However, I realized one problem: This updates the docs for the "free functions" in `core::ptr`, but it does not update the copies of these docs for the inherent methods of the `*const T` and `*mut T` types. These getting out-of-sync is certainly bad, but I also don't feel like copying all this stuff around. Instead, we should remove this redundancy. Any good ideas?
2018-09-24 17:36:44 +00:00
bors
a072d1bca6 Auto merge of #54509 - matthewjasper:better-drop-access, r=pnkfelix
[NLL] Rework checking for borrows conflicting with drops

Previously, we would split the drop access into multiple checks for each
field of a struct/tuple/closure and through `Box` dereferences. This
changes this to check if the borrow is accessed by the drop in
`places_conflict`.

We also now handle enums containing `Drop` types.

Closes #53569

r? @nikomatsakis
cc @pnkfelix
2018-09-24 14:47:17 +00:00
Michael Woerister
f2bf92a4e8 aarch64-pc-windows-msvc: Don't link libpanic_unwind to libtest. 2018-09-24 14:37:09 +02:00
bors
e5c6575801 Auto merge of #54507 - csmoe:deny_overflow, r=varkor
Deny the `overflowing_literals` lint for the 2018 edition

Closes https://github.com/rust-lang/rust/issues/54502
r? @varkor
2018-09-24 10:08:01 +00:00
gardrek
1b9da67811
Fixed three small typos. 2018-09-23 23:47:52 -05:00
bors
5ad5aca714 Auto merge of #54489 - matthiaskrgr:rls, r=kennytm
update rls to 32d457717ce37babef199fe4984b1e20d4e108d4

I patched rls to use the `rustc_tools_utils` supplied by the clippy submodule to get around the tidy warning.

Should fix rls and toolstate.
2018-09-24 04:32:24 +00:00
bors
8a92ebfb59 Auto merge of #54495 - raventid:improve-e0425-message, r=estebank
Improve error message for E0424

Resolves #54369

r? @estebank
2018-09-24 00:20:21 +00:00
bors
d4c6f40e7e Auto merge of #54485 - arielb1:avoid-ctor-attrs, r=eddyb
avoid loading constructor attributes in AdtDef decoding

During metadata loading, the AdtDefs for every ADT in the universe need
to be loaded (for example, for coherence of builtin traits). For that,
the attributes of the AdtDef need to be loaded too.

The attributes of a struct are duplicated between 2 def ids - the
constructor def-id, and the "type" def id. Loading attributes for both
def-ids, which was done in #53721, slowed the compilation of small
crates by 2-3%. This PR makes sure we only load the attributes for the
"type" def-id, avoiding the slowdown.

r? @eddyb & cc @nnethercote
2018-09-23 21:46:59 +00:00
Christian Poveda
1e3c86e1c4 Add test to check if inlining works for any operand 2018-09-23 16:15:46 -05:00
Mazdak Farrokhzad
e5b9331a86 dbg_macro: fix line numbers 2018-09-23 22:48:24 +02:00
Matthew Jasper
cfbd1a9a25 Update tests for changes to drop access 2018-09-23 20:27:41 +01:00
Matthew Jasper
4603fb8862 Rework checking for borrows conflicting with drops
Previously, we would split the drop access into multiple checks for each
field of a struct/tuple/closure and through `Box` dereferences. This
changes this to check if the borrow is accessed by the drop in
places_conflict.

This also allows us to handle enums in a simpler way, since we don't
have to construct any new places.
2018-09-23 20:27:41 +01:00
Matthew Jasper
d3f9af8891 Remove irrelevant message about drop order
When dropping a self-borrowing struct we shouldn't add a "values in a
scope are dropped in the opposite order they are defined" message,
since there is only one value being dropped.
2018-09-23 20:27:41 +01:00
bors
f49f6e73a8 Auto merge of #54229 - davidtwco:issue-52534, r=pnkfelix
[nll] borrows that must be valid for a free lifetime should explain why

Fixes #52534.

r? @nikomatsakis
2018-09-23 15:00:53 +00:00
csmoe
6523eabf6e add test for edition 2018 2018-09-23 22:59:06 +08:00
csmoe
4516ba7004 deny overflow literals 2018-09-23 22:58:47 +08:00
Mazdak Farrokhzad
5184dcc31c dbg_macro: only ignore cloudabi and emscripten 2018-09-23 15:59:34 +02:00