Commit Graph

61387 Commits

Author SHA1 Message Date
bors
05a7f25cc4 Auto merge of #39456 - nagisa:mir-switchint-everywhere, r=nikomatsakis
[MIR] SwitchInt Everywhere

Something I've been meaning to do for a very long while. This PR essentially gets rid of 3 kinds of conditional branching and only keeps the most general one - `SwitchInt`. Primary benefits are such that dealing with MIR now does not involve dealing with 3 different ways to do conditional control flow. On the other hand, constructing a `SwitchInt` currently requires more code than what previously was necessary to build an equivalent `If` terminator. Something trivially "fixable" with some constructor methods somewhere (MIR needs stuff like that badly in general).

Some timings (tl;dr: slightly faster^1 (unexpected), but also uses slightly more memory at peak (expected)):

^1: Not sure if the speed benefits are because of LLVM liking the generated code better or the compiler itself getting compiled better. Either way, its a net benefit. The CORE and SYNTAX timings done for compilation without optimisation.

```
AFTER:
Building stage1 std artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 31.50 secs
    Finished release [optimized] target(s) in 31.42 secs
Building stage1 compiler artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 439.56 secs
    Finished release [optimized] target(s) in 435.15 secs

CORE: 99% (24.81 real, 0.13 kernel, 24.57 user); 358536k resident
CORE: 99% (24.56 real, 0.15 kernel, 24.36 user); 359168k resident
SYNTAX: 99% (49.98 real, 0.48 kernel, 49.42 user); 653416k resident
SYNTAX: 99% (50.07 real, 0.58 kernel, 49.43 user); 653604k resident

BEFORE:
Building stage1 std artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 31.84 secs
Building stage1 compiler artifacts (x86_64-unknown-linux-gnu -> x86_64-unknown-linux-gnu)
    Finished release [optimized] target(s) in 451.17 secs

CORE: 99% (24.66 real, 0.20 kernel, 24.38 user); 351096k resident
CORE: 99% (24.36 real, 0.17 kernel, 24.18 user); 352284k resident
SYNTAX: 99% (52.24 real, 0.56 kernel, 51.66 user); 645544k resident
SYNTAX: 99% (51.55 real, 0.48 kernel, 50.99 user); 646428k resident
```

cc @nikomatsakis @eddyb
2017-02-13 02:32:09 +00:00
bors
956e2bcbaa Auto merge of #39572 - jseyfried:fix_inert_attributes, r=nrc
macros: fix inert attributes from `proc_macro_derives` with `#![feature(proc_macro)]`

This PR refactors collection of `proc_macro_derive` invocations to fix #39347.

After this PR, the input to a `#[proc_macro_derive]` function no longer sees `#[derive]`s on the underlying item. For example, consider:
```rust
extern crate my_derives;
use my_derives::{Trait, Trait2};

#[derive(Copy, Clone)]
#[derive(Trait)]
#[derive(Trait2)]
struct S;
```

Today, the input to the `Trait` derive is `#[derive(Copy, Clone, Trait2)] struct S;`, and the input to the `Trait2` derive is `#[derive(Copy, Clone)] struct S;`. More generally, a `proc_macro_derive` sees all builtin derives, as well as all `proc_macro_derive`s listed *after* the one being invoked.

After this PR, both `Trait` and `Trait2` will see `struct S;`.
This is a [breaking-change], but I believe it is highly unlikely to cause breakage in practice.

r? @nrc
2017-02-12 23:21:15 +00:00
bors
81bd2675ea Auto merge of #39769 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 7 pull requests

- Successful merges: #39654, #39662, #39697, #39740, #39743, #39756, #39760
- Failed merges:
2017-02-12 18:16:54 +00:00
Guillaume Gomez
2f3dc95778 Rollup merge of #39760 - shepmaster:struct-init-doc, r=GuillaumeGomez
Improve grammar on field init docs
2017-02-12 19:16:34 +01:00
Guillaume Gomez
fd006ad5a5 Rollup merge of #39756 - JordiPolo:feature/try_to_question, r=steveklabnik
Sustitutes try! for ? in the Result documentation

Hopefully newcomers will go strait to use `?`
2017-02-12 19:16:33 +01:00
Guillaume Gomez
461efc734b Rollup merge of #39743 - GuillaumeGomez:rustdoc-test-output, r=alexcrichton
Add tested item in the rustdoc --test output

r? @alexcrichton

cc @SergioBenitez
2017-02-12 19:16:32 +01:00
Guillaume Gomez
74204a0ce7 Rollup merge of #39740 - jimmycuadra:rustdoc-empty-stability, r=aturon
rustdoc: Only include a stability span if needed.

This patch gets rid of the empty stability boxes in docs by only including the span that creates it when the item actually has a stability class.

Here are images of the issue on `std::process::Output`:

Before:

<img width="340" alt="before" src="https://cloud.githubusercontent.com/assets/122457/22853638/ff88d1b2-f010-11e6-90d6-bf3d10e2fffa.png">

After:

<img width="333" alt="after" src="https://cloud.githubusercontent.com/assets/122457/22853639/06bfe7cc-f011-11e6-9892-f0ea2cc6ec90.png">

This is my first non-trivial patch to Rust, so I'm sure some of my approach is not idiomatic. Let me know how you'd like me to adjust!
2017-02-12 19:16:31 +01:00
Guillaume Gomez
0095ec25cc Rollup merge of #39697 - notriddle:rustdoc_tooltip, r=GuillaumeGomez
Add the item type to the tooltip

See:
https://users.rust-lang.org/t/seeking-opinions-from-colorblind-rustaceans-coloring-in-rustdoc-code-blocks
2017-02-12 19:16:30 +01:00
Guillaume Gomez
747b9e590f Rollup merge of #39662 - Henning-K:patch-1, r=frewsxcv
Fixes #39661

Clarifies the potential ambiguity.
2017-02-12 19:16:29 +01:00
Guillaume Gomez
be0e7498f0 Rollup merge of #39654 - ollie27:rustdoc_attributes, r=GuillaumeGomez
rustdoc: Show attributes on all item types

Currently attributes are only shown for structs, unions and enums but
they should be shown for all items. For example it is useful to know if a
function is `#[no_mangle]`.
2017-02-12 19:16:28 +01:00
bors
282fa87b55 Auto merge of #39680 - canndrew:uninhabited_from-infinite-loop, r=arielb1
Add recursion limit to inhabitedness check

Fixes #39489.
Add test aswell.
2017-02-12 07:20:31 +00:00
Jeffrey Seyfried
2cc61eebb7 Allow using inert attributes from proc_macro_derives with #![feature(proc_macro)]. 2017-02-12 07:20:04 +00:00
Jake Goulding
037ef0bbc8 Improve grammar on field init docs 2017-02-11 23:42:39 -05:00
bors
410d807e46 Auto merge of #39554 - zackmdavis:assert_eq_has_a_terrible_error_message_when_given_a_trailing_comma, r=BurntSushi
improve error message when two-arg assert_eq! receives a trailing comma

Previously, `assert_eq!(left, right,)` (respectively, `assert_ne!(left,
right,)`; note the trailing comma) would result in a confusing "requires
at least a format string argument" error. In reality, a format string is
optional, but the trailing comma puts us into the "match a token tree of
zero or more tokens" branch of the macro (in order to support the
optional format string), and passing the empty token tree into
`format_args!` results in the confusing error. If instead we match a
token tree of one or more tokens, we get a much more sensible
"unexpected end of macro invocation" error.

While we're here, fix up a stray space before a comma in the match
guards.

Resolves #39369.

-----

**Before:**
```
$ rustc scratch.rs
error: requires at least a format string argument
 --> scratch.rs:2:5
  |
2 |     assert_eq!(1, 2,);
  |     ^^^^^^^^^^^^^^^^^^
  |
  = note: this error originates in a macro outside of the current crate

error: aborting due to previous error
```

**After:**
```
$ ./build/x86_64-unknown-linux-gnu/stage1/bin/rustc scratch.rs
error: unexpected end of macro invocation
 --> scratch.rs:2:20
  |
2 |     assert_eq!(1, 2,);
  |                    ^
```
2017-02-12 03:34:57 +00:00
Jeffrey Seyfried
4b413bc393 Move legacy custom derives collection into resolver.find_attr_invoc(). 2017-02-12 03:22:52 +00:00
Jordi Polo
6b5c5f29ce Sustitutes try! for ? in the Result documentation 2017-02-12 11:02:55 +09:00
bors
912bc14a6b Auto merge of #38945 - battisti:fix_thread_num, r=alexcrichton
treat setting the number of test-threads to 0 as an error

It is currently possible to call `cargo test -- --test-threads=0` which will cause cargo to hang until aborted. This change will fix that and will report an appropriate error to the user.
2017-02-12 00:54:57 +00:00
bors
ba7cf7cc5d Auto merge of #39747 - mattico:fix-llvm4-createcompileunit, r=alexcrichton
[LLVM 4.0] Fix CreateCompileUnit

This is largely identical to @dylanmckay's [patch](https://github.com/dylanmckay), except that it doesn't try to use `file_metadata()`. I don't think that is necessary because we don't want the compile unit to be added to  `debug_context.created_files`, though I'd like confirmation from someone who knows for sure. If that is needed, I can modify `file_metadata_()` so that it can be used from `compile_unit_metadata()`.
2017-02-11 22:10:53 +00:00
Matt Ickstadt
aebce5bd2a Fix as_ptr() drop problem 2017-02-11 15:41:03 -06:00
Matt Ickstadt
68fff62542 [LLVM 4.0] Fix CreateCompileUnit 2017-02-11 15:15:28 -06:00
Alexander Battisti
0a4c268a6b removed trailing whitespace 2017-02-11 20:04:05 +01:00
Jimmy Cuadra
1fa9dbc00e Use functional transformations on the option instead of matching. 2017-02-11 10:00:56 -08:00
Guillaume Gomez
c951ed7fb6 Add tested item in the rustdoc --test output 2017-02-11 16:36:31 +01:00
Jimmy Cuadra
bd14c7f333 Remove extra closing span element. 2017-02-11 07:10:03 -08:00
Jimmy Cuadra
c603839d5f rustdoc: Only include a stability span if needed. 2017-02-11 04:16:13 -08:00
bors
bae454edc5 Auto merge of #39736 - frewsxcv:rollup, r=frewsxcv
Rollup of 9 pull requests

- Successful merges: #39174, #39660, #39676, #39692, #39701, #39710, #39721, #39724, #39725
- Failed merges:
2017-02-11 07:18:21 +00:00
Simonas Kazlauskas
b663d9d5e8 Rebase fallout
Because certain somebody sucks at resolving big conflicts
2017-02-11 08:10:41 +02:00
Corey Farwell
56275f82a8 Rollup merge of #39725 - Aaronepower:master, r=steveklabnik
Updated nightly book with installing nightly instructions
2017-02-10 23:41:40 -05:00
Corey Farwell
0e6b370929 Rollup merge of #39724 - malbarbo:android, r=alexcrichton
Allow rustc data structures compile to android

flock structure is defined in asm*/fcntl.h. This file on android is
generated from the linux kernel source, so they are the same.
2017-02-10 23:41:39 -05:00
Corey Farwell
6866df669c Rollup merge of #39721 - whataloadofwhat:catch-unwind-bang, r=alexcrichton
Change std::panicking::try::Data into a union

No longer potentially call `mem::uninitialized::<!>()`

Fixes #39432
2017-02-10 23:41:38 -05:00
Corey Farwell
0fd89adcaa Rollup merge of #39710 - brson:151notes, r=alexcrichton
Update 1.15.1 relnotes

Matching what is on stable.
2017-02-10 23:41:37 -05:00
Corey Farwell
15bec3dd63 Rollup merge of #39701 - sgrif:sg-vec-reserve-docs, r=alexcrichton
Explicitly mention that `Vec::reserve` is based on len not capacity

I spent a good chunk of time tracking down a buffer overrun bug that
resulted from me mistakenly thinking that `reserve` was based on the
current capacity not the current length. It would be helpful if this
were called out explicitly in the docs.
2017-02-10 23:41:36 -05:00
Corey Farwell
92cf7aecb4 Rollup merge of #39692 - oli-obk:patch-2, r=aturon
remove wrong packed struct test

This UB was found by running the test under [Miri](https://github.com/solson/miri) which rejects these unsafe unaligned loads. 😄
2017-02-10 23:41:35 -05:00
Corey Farwell
4269e5207e Rollup merge of #39676 - alexcrichton:fix-again, r=brson
Actually fix manifest generation

The previous fix contained an error where `toml::encode` returned a runtime
error, so this version just constructs a literal `toml::Value`.
2017-02-10 23:41:34 -05:00
Corey Farwell
bf750890c9 Rollup merge of #39660 - alexcrichton:shasum-dirs, r=brson
Don't include directory names in shasums

Right now we just run `shasum` on an absolute path but right now the shasum
files only include filenames, so let's use `current_dir` and just the file name
to only have the file name emitted.
2017-02-10 23:41:33 -05:00
Corey Farwell
17dcc51438 Rollup merge of #39174 - rspeer:iter-nth-doc-fix, r=alexcrichton
Fix a misleading statement in `Iterator.nth()`

The `Iterator.nth()` documentation says "Note that all preceding elements will be consumed". I assumed from that that the preceding elements would be the *only* ones that were consumed, but in fact the returned element is consumed as well.

The way I read the documentation, I assumed that `nth(0)` would not discard anything (there are 0 preceding elements, and maybe it just peeks at the start of the iterator somehow), so I added a sentence clarifying that it does. I also rephrased it to avoid the stunted "i.e." phrasing.
2017-02-10 23:41:32 -05:00
bors
f140a6c6ef Auto merge of #39642 - stjepang:specialize-slice-partialord, r=alexcrichton
Specialize `PartialOrd<A> for [A] where A: Ord`

This way we can call `cmp` instead of `partial_cmp` in the loop, removing some burden of optimizing `Option`s away from the compiler.

PR #39538 introduced a regression where sorting slices suddenly became slower, since `slice1.lt(slice2)` was much slower than `slice1.cmp(slice2) == Less`. This problem is now fixed.

To verify, I benchmarked this simple program:
```rust
fn main() {
    let mut v = (0..2_000_000).map(|x| x * x * x * 18913515181).map(|x| vec![x, x ^ 3137831591]).collect::<Vec<_>>();
    v.sort();
}
```

Before this PR, it would take 0.95 sec, and now it takes 0.58 sec.
I also tried changing the `is_less` lambda to use `cmp` and `partial_cmp`. Now all three versions (`lt`, `cmp`, `partial_cmp`) are equally performant for sorting slices - all of them take 0.58 sec on the
benchmark.

Tangentially, as soon as we get `default impl`, it might be a good idea to implement a blanket default impl for `lt`, `gt`, `le`, `ge` in terms of `cmp` whenever possible. Today, those four functions by default are only implemented in terms of `partial_cmp`.

r? @alexcrichton
2017-02-11 04:37:27 +00:00
bors
064a0ee131 Auto merge of #39490 - RReverser:em-linker, r=alexcrichton
Add Emscripten-specific linker

Emscripten claims to accept most GNU linker options, but in fact most of `-Wl,...` are useless for it and instead it requires some additional special options which are easier to handle in a separate trait.

Currently added:
 - `export_symbols`: works on executables as special Emscripten case since staticlibs/dylibs aren't compiled to JS, while exports are required to be accessible from JS.
Fixes #39171.
 - `optimize` - translates Rust's optimization level to Emscripten optimization level (whether passed via `-C opt-level=...` or `-O...`).
Fixes #36899.
 - `debuginfo` - translates debug info; Emscripten has 5 debug levels while Rust has 3, so chose to translate `-C debuginfo=1` to `-g3` (preserves whitespace, variable and function names for easy debugging).
Fixes #36901.
 - `no_default_libraries` - tells Emscripten to exclude `memcpy` and co.

TODO (in future PR): dynamic linking via `SIDE_MODULE` / `MAIN_MODULE` mechanism.
2017-02-10 23:50:46 +00:00
bors
2425b22774 Auto merge of #39438 - clarcharr:box_from, r=alexcrichton
Conversions between slices and boxes

This allows conversion for `Copy` slices, `str`, and `CStr` into their boxed counterparts.

This also adds the method `CString::into_boxed_c_str`.

I would like to add similar implementations for `OsStr` as well, but I have not figured out how.
2017-02-10 21:11:29 +00:00
whataloadofwhat
ca92c51682 Change std::panicking::try::Data into a union
No longer potentially call `mem::uninitialized::<!>()`

Fixes #39432
2017-02-10 19:20:28 +00:00
Aaron Power
5c295110fd Updated installing nightly instructions 2017-02-10 18:44:32 +00:00
Marco A L Barbosa
a8364acafb Allow rustc data structures compile to android
flock structure is defined in asm*/fcntl.h. This file on android is
generated from the linux kernel source, so they are the same.
2017-02-10 16:34:10 -02:00
Simonas Kazlauskas
f3bd723101 Fix intcast, use it where appropriate 2017-02-10 19:47:09 +02:00
Simonas Kazlauskas
7d1f36a482 Inline open_drop_for_variant & clean matches::test 2017-02-10 19:47:09 +02:00
Simonas Kazlauskas
49ccc106da Rebase fixups 2017-02-10 19:47:09 +02:00
Simonas Kazlauskas
1949bdf531 Fix tests 2017-02-10 19:47:08 +02:00
Simonas Kazlauskas
6c19104c43 Fix build
Additionally, revert unnecessary changes to ty::layout
2017-02-10 19:47:06 +02:00
Simonas Kazlauskas
eb727a8faa Add TerminatorKind::if_ convenience constructor
Constructs a TerminatorKind::SwitchInt for an equivalent conditional true-false branch.
2017-02-10 19:45:55 +02:00
Simonas Kazlauskas
a8b7b62185 Revert use of layout code in typeck::collect 2017-02-10 19:45:53 +02:00
Simonas Kazlauskas
362eb7ea07 Inspect now does not force on-stack Lvalue 2017-02-10 19:44:00 +02:00