Commit Graph

62383 Commits

Author SHA1 Message Date
Simonas Kazlauskas
2f0dd63bbe Checked (and unchecked) slicing for strings?
What is this magic‽
2017-03-22 18:43:01 +02:00
bors
8c4f2c64c6 Auto merge of #40043 - petrochenkov:objpars, r=nikomatsakis
Refactor parsing of trait object types

Bugs are fixed and code is cleaned up.

User visible changes:
- `ty` matcher in macros accepts trait object types like `Write + Send` (https://github.com/rust-lang/rust/issues/39080)
- Buggy priority of `+` in trait object types starting with `for` is fixed (https://github.com/rust-lang/rust/issues/39317). `&for<'a> Trait<'a> + Send` is now parsed as `(&for<'a> Trait<'a>) + Send` and requires parens `&(for<'a> Trait<'a> + Send)`. For comparison, `&Send + for<'a> Trait<'a>` was parsed like this since [Nov 27, 2014](https://github.com/rust-lang/rust/pull/19298).
- Trailing `+`s are supported in trait objects, like in other bounds.
- Better error reporting for trait objects starting with `?Sized`.

Fixes https://github.com/rust-lang/rust/issues/39080
Fixes https://github.com/rust-lang/rust/issues/39317 [breaking-change]
Closes https://github.com/rust-lang/rust/issues/39298
cc https://github.com/rust-lang/rust/issues/39085 (fixed, then reverted https://github.com/rust-lang/rust/pull/40043#issuecomment-286570653)
cc https://github.com/rust-lang/rust/issues/39318 (fixed, then reverted https://github.com/rust-lang/rust/pull/40043#issuecomment-284493890)

r? @nikomatsakis
2017-03-22 02:00:16 +00:00
bors
50c4e3e8d0 Auto merge of #40664 - jseyfried:fix_derive_bug, r=nrc
macros: fix bug in legacy custom derive processing

Fixes #40663.
r? @nrc
2017-03-21 23:11:56 +00:00
Jeffrey Seyfried
bd862d29d3
Fix bug in legacy #[derive] processing logic. 2017-03-21 16:53:34 -04:00
Vadim Petrochenkov
b5e889791a Refactor parsing of trait object types 2017-03-21 23:01:53 +03:00
bors
cab4bff3de Auto merge of #40601 - stjepang:sort-unstable, r=alexcrichton
Implement feature sort_unstable

Tracking issue for the feature: #40585

This is essentially integration of [pdqsort](https://github.com/stjepang/pdqsort) into libcore.

There's plenty of unsafe blocks to review. The heart of pdqsort is `fn partition_in_blocks` and is probably the most challenging function to understand. It requires some patience, but let me know if you find it too difficult - comments could always be improved.

#### Changes

* Added `sort_unstable` feature.
* Tweaked insertion sort constants for stable sort. Sorting integers is now up to 5% slower, but sorting big elements is much faster (in particular, `sort_large_big_random` is 35% faster). The old constants were highly optimized for sorting integers, so overall the configuration is more balanced now. A minor regression in case of integers is forgivable as we recently had performance improvements (#39538) that completely make up for it.
* Removed some uninteresting sort benchmarks.
* Added a new sort benchmark for string sorting.

#### Benchmarks

The following table compares stable and unstable sorting:
```
name                                 stable ns/iter        unstable ns/iter     diff ns/iter   diff %
slice::sort_large_ascending          7,240 (11049 MB/s)    7,380 (10840 MB/s)            140    1.93%
slice::sort_large_big_random         1,454,138 (880 MB/s)  910,269 (1406 MB/s)      -543,869  -37.40%
slice::sort_large_descending         13,450 (5947 MB/s)    10,895 (7342 MB/s)         -2,555  -19.00%
slice::sort_large_mostly_ascending   204,041 (392 MB/s)    88,639 (902 MB/s)        -115,402  -56.56%
slice::sort_large_mostly_descending  217,109 (368 MB/s)    99,009 (808 MB/s)        -118,100  -54.40%
slice::sort_large_random             477,257 (167 MB/s)    346,028 (231 MB/s)       -131,229  -27.50%
slice::sort_large_random_expensive   21,670,537 (3 MB/s)   22,710,238 (3 MB/s)     1,039,701    4.80%
slice::sort_large_strings            6,284,499 (38 MB/s)   6,410,896 (37 MB/s)       126,397    2.01%
slice::sort_medium_random            3,515 (227 MB/s)      3,327 (240 MB/s)             -188   -5.35%
slice::sort_small_ascending          42 (1904 MB/s)        41 (1951 MB/s)                 -1   -2.38%
slice::sort_small_big_random         503 (2544 MB/s)       514 (2490 MB/s)                11    2.19%
slice::sort_small_descending         72 (1111 MB/s)        69 (1159 MB/s)                 -3   -4.17%
slice::sort_small_random             369 (216 MB/s)        367 (217 MB/s)                 -2   -0.54%
```

Interesting cases:
* Expensive comparison function and string sorting - it's a really close race, but timsort performs a slightly smaller number of comparisons. This is a natural difference of bottom-up merging versus top-down partitioning.
* `large_descending` - unstable sort is faster, but both sorts should have equivalent performance. Both just check whether the slice is descending and if so, they reverse it. I blame LLVM for the discrepancy.

r? @alexcrichton
2017-03-21 19:50:17 +00:00
Stjepan Glavina
a718051f63 Unit test heapsort 2017-03-21 20:46:20 +01:00
Stjepan Glavina
a18b2aa641 Remove stabilized features 2017-03-21 20:46:20 +01:00
Stjepan Glavina
02d6e00587 Use partial insertion sort 2017-03-21 20:46:20 +01:00
Stjepan Glavina
c4454a5507 Tweak the constants a bit 2017-03-21 20:46:20 +01:00
Stjepan Glavina
942173b38f Fix grammar 2017-03-21 20:46:20 +01:00
Stjepan Glavina
cfe6e13b11 Faster sort_unstable on presorted inputs 2017-03-21 20:46:20 +01:00
Stjepan Glavina
f0e5868627 Fix a doctest 2017-03-21 20:46:20 +01:00
Stjepan Glavina
e365974750 Address Alex's PR comments 2017-03-21 20:46:20 +01:00
Stjepan Glavina
f1913e2a30 Implement feature sort_unstable 2017-03-21 20:46:20 +01:00
bors
58c701f5c7 Auto merge of #40693 - frewsxcv:rollup, r=frewsxcv
Rollup of 10 pull requests

- Successful merges: #40229, #40312, #40332, #40502, #40556, #40576, #40667, #40671, #40681, #40685
- Failed merges:
2017-03-21 17:02:38 +00:00
bors
53eb08bedc Auto merge of #40686 - alexcrichton:less-logging, r=brson
travis: Don't set `RUST_LOG` globally

I have a suspicion that this caused a large regression in cycle times by forcing
the compiler to perform more checks on every `debug!` statement, so let's test
this out by removing the `RUST_LOG` env var globally.

This regression in cycle time was witnessed between [two] [builds] where the
[PR] in question didn't do much suspicious. Judging by how the stage0 times
*also* regressed though then this is my best guess.

[two]: https://travis-ci.org/rust-lang/rust/builds/210149932
[builds]: https://travis-ci.org/rust-lang/rust/builds/210179995
[PR]: https://github.com/rust-lang/rust/pull/40446
2017-03-21 14:35:18 +00:00
Corey Farwell
b6240e51ae Rollup merge of #40685 - portal-chan:patch-1, r=eddyb
Add missing associated type Item to Iterator
2017-03-20 23:45:05 -04:00
Corey Farwell
c6b2110714 Rollup merge of #40681 - est31:nightlies_txt_was_removed, r=alexcrichton
config.toml.example: nightlies.txt got removed

Instead, stage0.txt got introduced.

See also commit 02538d463a
2017-03-20 23:45:03 -04:00
Corey Farwell
bf3f77b716 Rollup merge of #40671 - GuillaumeGomez:options-urls, r=frewsxcv
Add missing urls in Option enum

r? @rust-lang/docs
2017-03-20 23:45:02 -04:00
Corey Farwell
d0c04fbaca Rollup merge of #40667 - DaseinPhaos:patch-4, r=GuillaumeGomez
Fix typo in `ptr` doc

`sizeof` should be `size_of`
2017-03-20 23:45:01 -04:00
Corey Farwell
2532ad7d0b Rollup merge of #40576 - dwrensha:mir-terminator-kind-doc-typo, r=nikomatsakis
fix innacuracy in mir TerminatorKind::SwitchInt docs

Each index of `values` corresponds to an index of `targets`, and `targets` additionally has a "default case" element at its end, so `targets.len() == values.len() + 1`, not the other way around. For example, [here](0aeb9c1297/src/librustc/mir/mod.rs (L549-L550)) is a concrete instance of `SwitchInt` being constructed with `targets.len() == 2` and `values.len() == 1`.
2017-03-20 23:45:00 -04:00
Corey Farwell
17656ab328 Rollup merge of #40556 - cramertj:stabilize-pub-restricted, r=petrochenkov
Stabilize pub(restricted)

Fix https://github.com/rust-lang/rust/issues/32409
2017-03-20 23:44:59 -04:00
Corey Farwell
03235ccbfe Rollup merge of #40502 - jdhorwitz:master, r=steveklabnik
clean up visuals on error index #40425

r? @steveklabnik

Knocking these down to a smaller header made it look quite nice in my opinion.
2017-03-20 23:44:58 -04:00
Corey Farwell
14b5d56587 Rollup merge of #40332 - steveklabnik:extract-book, r=alexcrichton
Extract book into a submodule

Part of https://github.com/rust-lang/rust/issues/39588

We probably don't want to land this till after the beta branches on friday, but would still ❤️ a review from @alexcrichton , since I am a rustbuild noob.

This pr:

1. removes the book
2. adds it back in as a submodule
3. the submodule includes both the old book and the new book
4. it also includes an index page explaining the difference in editions
5. it also includes redirect pages for the old book URLs.
6. so we build all that stuff too.

r? @alexcrichton
2017-03-20 23:44:57 -04:00
Corey Farwell
42cfdc1955 Rollup merge of #40312 - jdhorwitz:papercut, r=steveklabnik
Papercut

r? @steveklabnik
2017-03-20 23:44:56 -04:00
Corey Farwell
fcc2d25794 Rollup merge of #40229 - cramertj:break-to-blocks, r=nikomatsakis
Implement `?` in catch expressions

Builds on #39921. Final part of #39849.

r? @nikomatsakis
2017-03-20 23:44:55 -04:00
Alex Crichton
7305ca3852 travis: Don't set RUST_LOG globally
I have a suspicion that this caused a large regression in cycle times by forcing
the compiler to perform more checks on every `debug!` statement, so let's test
this out by removing the `RUST_LOG` env var globally.

This regression in cycle time was witnessed between [two] [builds] where the
[PR] in question didn't do much suspicious. Judging by how the stage0 times
*also* regressed though then this is my best guess.

[two]: https://travis-ci.org/rust-lang/rust/builds/210149932
[builds]: https://travis-ci.org/rust-lang/rust/builds/210179995
[PR]: https://github.com/rust-lang/rust/pull/40446
2017-03-20 14:32:36 -07:00
portal
1a00c8fe0f Add missing associated type Item to Iterator 2017-03-20 23:29:04 +02:00
est31
aa83d7107f config.toml.example: nightlies.txt got removed
Instead, stage0.txt got introduced.

See also commit 02538d463a
2017-03-20 19:28:04 +01:00
bors
134c4a0f08 Auto merge of #39628 - arielb1:shimmir, r=eddyb
Translate shims using MIR

This removes one large remaining part of old trans.
2017-03-20 15:58:10 +00:00
steveklabnik
96d35947c3 fix trailing whitespace 2017-03-20 10:10:16 -04:00
steveklabnik
4eef581817 exempt hbs from linkchecker 2017-03-20 10:10:16 -04:00
steveklabnik
d1d9626e75 Fix up various links
The unstable book, libstd, libcore, and liballoc all needed some
adjustment.
2017-03-20 10:10:16 -04:00
steveklabnik
c0e7b16f61 Update book and reference submodules
Some links needed adjustment to support this new scheme.
2017-03-20 10:10:15 -04:00
steveklabnik
23304593a6 skip nostarch directory
This is for coordinating with our publishers; we don't ever want to test it.
2017-03-20 10:10:15 -04:00
steveklabnik
966e72156f fix whitespace 2017-03-20 10:10:15 -04:00
steveklabnik
c97b48f261 Fix up some issues.
Becuase I had run a `x.py doc` before doing this work, I had
accidentally relied on some files existing in places that they didn't
need to be.
2017-03-20 10:10:15 -04:00
steveklabnik
422330df28 Render redirect pages.
These pages will help people who have links to the older book.
2017-03-20 10:10:15 -04:00
steveklabnik
5f2f3d07dc build book index 2017-03-20 10:10:15 -04:00
steveklabnik
8573a1319a build both editions of the book 2017-03-20 10:10:15 -04:00
steveklabnik
f17965da1e Import submodule for the book.
It's all in the external repository now.
2017-03-20 10:10:15 -04:00
steveklabnik
e4628fb0db Remove the existing book
We'll bring this back in with the next commit, as a submodule.
2017-03-20 10:10:14 -04:00
Guillaume Gomez
17a26ee275 Add missing urls in Option enum 2017-03-20 15:09:02 +01:00
Luxko
c50a6ec738 Fix typo in ptr doc
`sizeof` should be `size_of`
2017-03-20 17:17:10 +08:00
bors
244f893ed7 Auto merge of #40659 - frewsxcv:rollup, r=frewsxcv
Rollup of 9 pull requests

- Successful merges: #40241, #40281, #40398, #40521, #40532, #40554, #40566, #40581, #40587
- Failed merges:
2017-03-20 08:31:16 +00:00
bors
6738cd4d47 Auto merge of #40281 - jimmycuadra:try-from-from-str, r=aturon
Rename TryFrom's associated type and implement str::parse using TryFrom.

Per discussion on the tracking issue, naming `TryFrom`'s associated type `Error` is generally more consistent with similar traits in the Rust ecosystem, and what people seem to assume it should be called. It also helps disambiguate from `Result::Err`, the most common "Err".

See https://github.com/rust-lang/rust/issues/33417#issuecomment-269108968.

`TryFrom<&str>` and `FromStr` are equivalent, so have the latter provide the former to ensure that. Using `TryFrom` in the implementation of `str::parse` means types that implement either trait can use it. When we're ready to stabilize `TryFrom`, we should update `FromStr` to
suggest implementing `TryFrom<&str>` instead for new code.

See https://github.com/rust-lang/rust/issues/33417#issuecomment-277175994
and https://github.com/rust-lang/rust/issues/33417#issuecomment-277253827.

Refs #33417.
2017-03-20 05:36:36 +00:00
Corey Farwell
d49f86901c Rollup merge of #40587 - GuillaumeGomez:rustdoc-const-display, r=frewsxcv
Fix invalid debug display for associated consts

Fixes #40568.

r? @rust-lang/docs

cc @SergioBenitez
2017-03-19 20:51:13 -04:00
Corey Farwell
de724ba9a6 Rollup merge of #40581 - TimNN:di-global-40, r=alexcrichton
[LLVM 4.0] Add missing debuginfo metadata to globals

Fixes #40580.

cc @rkruppe
cc #40123
2017-03-19 20:51:12 -04:00
Corey Farwell
4e9033124b Rollup merge of #40566 - clarcharr:never_error, r=sfackler
Implement std::error::Error for !.
2017-03-19 20:51:11 -04:00