62422 Commits

Author SHA1 Message Date
Corey Farwell
b5dad3a1ab Rollup merge of #40542 - abonander:issue_40535, r=jseyfried
Correctly get source for metatdata-only crate type

Closes #40535

However, I'm not sure how to approach writing a regression test since I'm still working on a reduced test case from the code that caused the ICE in the first place. It's not enough to have an unknown `extern crate` in a metadata crate, it depends on a few extra arguments but I'm not sure which yet.

Also replaced the `unwrap()` with a more informative `expect()`.

r? @jseyfried
2017-03-22 23:38:00 -04:00
Corey Farwell
cc98dfc8d2 Rollup merge of #40518 - michaelwoerister:hir-id, r=eddyb
Introduce HirId, a replacement for ast::NodeId after lowering to HIR

This is the first step towards implementing #40303. This PR introduces the `HirId` type and generates a `HirId` for everything that would be assigned one (i.e. stuff in the HIR), but the HIR data types still use `NodeId` for now. Changing that is a big refactoring that I want to do in a separate PR.

A `HirId` uniquely identifies a node in the HIR of the current crate. It is composed of the `owner`, which is the `DefIndex` of the directly enclosing `hir::Item`, `hir::TraitItem`, or `hir::ImplItem` (i.e. the closest "item-like"), and the `local_id` which is unique within the given owner.

This PR is also running a number of consistency checks for the generated `HirId`s:
- Does `NodeId` in the HIR have a corresponding `HirId`?
- Is the `owner` part of each `HirId` consistent with its position in the HIR?
- Do the numerical values of the `local_id` part all lie within a dense range of integers?

cc @rust-lang/compiler

r? @eddyb or @nikomatsakis
2017-03-22 23:37:59 -04:00
Corey Farwell
916c0b83cc Rollup merge of #39891 - shepmaster:emit-mir, r=nikomatsakis
Teach rustc --emit=mir

I'm opening this PR to discuss:

1. Is this a good idea?
1. Is this a good implementation?

I'm sure people will have opinions on both points!

This spawned from https://github.com/rust-lang/rust/issues/31847#issuecomment-279179057, so I figured a prototype implementation could help provide a seed to talk about.
2017-03-22 23:37:58 -04:00
bors
c62e532f3d Auto merge of #40748 - frewsxcv:rollup, r=frewsxcv
Rollup of 13 pull requests

- Successful merges: #40509, #40523, #40548, #40578, #40619, #40689, #40690, #40692, #40704, #40722, #40723, #40725, #40732
- Failed merges:
2017-03-22 23:31:08 +00:00
Corey Farwell
0e57709161 Rollup merge of #40732 - petrochenkov:booktidy, r=steveklabnik
Update the book submodule and fix tidy

When the book was included into https://github.com/rust-lang/rust as a submodule, tidy started failing on Windows.
https://github.com/rust-lang/book/pull/549 fixed the problem, now the submodule needs to be updated.
2017-03-22 19:30:35 -04:00
Corey Farwell
b2d62e8737 Rollup merge of #40725 - Cldfire:master, r=estebank
Remove duplicated styling in main.css

If nothing else, it saves a bit of data.
2017-03-22 19:30:34 -04:00
Corey Farwell
3e4c910a67 Rollup merge of #40723 - SamWhited:e0090_error_explanation, r=estebank
E0090: Add explanation for error message

See #32777

    $ rustc --explain E0090
    The wrong number of lifetimes were supplied. For example:

    ```
    fn foo<'a: 'b, 'b: 'a>() {}

    fn main() {
        foo::<'static>(); // error, expected 2 lifetime parameters
    }
    ```
2017-03-22 19:30:33 -04:00
Corey Farwell
6e7533f3ae Rollup merge of #40722 - stjepang:doc-consistency-fixes, r=steveklabnik
Various fixes to wording consistency in the docs

A bunch of random fixes, added punctuation, plurals, backticks, and so on...

r? @steveklabnik
2017-03-22 19:30:32 -04:00
Corey Farwell
f2e801e4b4 Rollup merge of #40704 - omtcyfz:clang_version_bump, r=alexcrichton
Nit: LLVM & Clang latest version is 4.0

Small nit: since latest Clang version is 4.0 it's nice to reflect this in the documentation.

Also, I couldn't find anything, but there might be any hard-coded check that Clang version matches "3.X" anywhere in the build system; if there is one, it'd be great to bump that one too.
2017-03-22 19:30:31 -04:00
Corey Farwell
baaa253659 Rollup merge of #40692 - SamWhited:consistent_str_docs_punctuation, r=bstrie
str: Make docs consistently punctuated

Every so slightly pointless one character PR, but this was driving me nuts while reading the docs a moment ago (all the [other public structs](https://doc.rust-lang.org/std/str/index.html#structs) have descriptions that end in a full-stop).
2017-03-22 19:30:30 -04:00
Corey Farwell
81edcb8753 Rollup merge of #40690 - GuillaumeGomez:fix-iter-docs, r=frewsxcv
Fix invalid linking in iter docs

r? @rust-lang/docs
2017-03-22 19:30:29 -04:00
Corey Farwell
88d40dc773 Rollup merge of #40689 - GuillaumeGomez:rustdoc-associated-type-formatting, r=frewsxcv
Add whitespace around "=" in assoc items

Part of #40641.

r? @rust-lang/docs

Before:

<img width="1440" alt="screen shot 2017-03-20 at 22 42 34" src="https://cloud.githubusercontent.com/assets/3050060/24123102/89181d8c-0dbe-11e7-897c-841497cf7001.png">

After:

<img width="1440" alt="screen shot 2017-03-20 at 22 42 36" src="https://cloud.githubusercontent.com/assets/3050060/24123118/8dec176e-0dbe-11e7-9759-cabbd062a4c2.png">
2017-03-22 19:30:28 -04:00
Corey Farwell
5947db1d4e Rollup merge of #40619 - stjepang:unstable-book-sort-unstable, r=frewsxcv
Add docs for sort_unstable to unstable book

Tracking issue for the feature: #40585

r? @steveklabnik
2017-03-22 19:30:27 -04:00
Corey Farwell
d4f296f03b Rollup merge of #40578 - michaelwoerister:shorter-compiletest-stamps, r=alexcrichton
Make the filenames of .stamp files generated by compiletest shorter

Otherwise we run into filename length limitations on some file systems. See https://bugs.launchpad.net/ecryptfs/+bug/344878 for an example where we only can have ~145 characters for filenames.

r? @alexcrichton
2017-03-22 19:30:26 -04:00
Corey Farwell
fde69411dc Rollup merge of #40548 - alexcrichton:appveyor-ninja, r=brson
appveyor: Use Ninja to build LLVM on MinGW

I have a suspicion that MinGW's make is the cause of #40546 rather than anything
else, but that's purely a suspicion without any facts to back it up. In any case
we'll eventually be moving the MSVC build over to Ninja in order to leverage
sccache regardless, so this commit simply jumpstarts that process by downloading
Ninja for use by MinGW anyway.

I'm not sure if this closes #40546 for real, but this is my current best shot at
closing it out, so...

Closes #40546
2017-03-22 19:30:25 -04:00
Corey Farwell
3f4ef9a535 Rollup merge of #40523 - durka:patch-38, r=petrochenkov
add test for nested macro def (#31946)

Adds a test for issue #31946 which was fixed in 1.12.0.

Closes #31946.
2017-03-22 19:30:24 -04:00
Corey Farwell
880f03b28c Rollup merge of #40509 - jseyfried:duplicate_check_macro_exports, r=nrc
Forbid conflicts between macros 1.0 exports and macros 2.0 exports

This PR forbids for conflicts between `#[macro_export]`/`#[macro_reexport]` macro exports and `pub use` macro exports. For example,
```rust
// crate A:
pub use macros::foo;
//^ This is allowed today, will be forbidden by this PR.

// crate B:
extern crate A; // This triggers a confusing error today.
use A::foo; // This could refer to refer to either macro export in crate A.
```

r? @nrc
2017-03-22 19:30:23 -04:00
Stjepan Glavina
b7a3d46efa Add 'the' before 'start'/'end' 2017-03-22 18:42:42 +01:00
Stjepan Glavina
d6da1d9b46 Various fixes to wording consistency in the docs 2017-03-22 17:19:52 +01:00
Michael Woerister
090767b5ef Allocate numerical values of DefIndexes from two seperate ranges.
This way we can have all item-likes occupy a dense range of
DefIndexes, which is good for making fast, array-based
dictionaries.
2017-03-22 17:07:19 +01:00
Michael Woerister
bc259ee844 Introduce HirId, a replacement for NodeId after lowering to HIR.
HirId has a more stable representation than NodeId, meaning that
modifications to one item don't influence (part of) the IDs within
other items. The other part is a DefIndex for which there already
is a way of stable hashing and persistence.

This commit introduces the HirId type and generates a HirId for
every NodeId during HIR lowering, but the resulting values are
not yet used anywhere, except in consistency checks.
2017-03-22 17:02:07 +01:00
Michael Woerister
559127b451 Implement indexed_vec::Idx for ast::NodeId 2017-03-22 16:11:18 +01:00
Michael Woerister
9e0589a52b Add resize() method to IndexVec. 2017-03-22 16:11:18 +01:00
Vadim Petrochenkov
9e772b0092 Update the book submodule and fix tidy 2017-03-22 11:51:03 +03:00
Sam Whited
8ea0f18d9a E0090: Expand error message explanation 2017-03-22 00:07:12 -05:00
Cldfire
e2b5a8cf57 Remove duplicate style classes 2017-03-21 23:40:41 -04:00
Alex Crichton
6ae22346b8 appveyor: Use Ninja to build LLVM on MinGW
I have a suspicion that MinGW's make is the cause of #40546 rather than anything
else, but that's purely a suspicion without any facts to back it up. In any case
we'll eventually be moving the MSVC build over to Ninja in order to leverage
sccache regardless, so this commit simply jumpstarts that process by downloading
Ninja for use by MinGW anyway.

I'm not sure if this closes #40546 for real, but this is my current best shot at
closing it out, so...

Closes #40546
2017-03-21 19:18:56 -07: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
Sam Whited
8e352f7d86 E0090: Add explanation for error message
See #32777
2017-03-21 20:15:55 -05:00
Jake Goulding
4ddedf7246 Add warning about volatility of MIR output 2017-03-21 20:19:03 -04:00
Jake Goulding
9218f9772a Teach rustc --emit=mir 2017-03-21 20:19:02 -04: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
Stjepan Glavina
6acbbc66f7 Add docs for sort_unstable to unstable book 2017-03-21 23:45:27 +01:00
Jeffrey Seyfried
bd862d29d3
Fix bug in legacy #[derive] processing logic. 2017-03-21 16:53:34 -04:00
Michael Woerister
cbb3af1e9c
Make the filenames of .stamp files generated by compiletest shorter.
Otherwise we run into filename length limitations on some file
systems (especially ecryptfs).
2017-03-21 16:50:36 -04:00
Austin Bonander
8a6ef50575
Regression test for rust-lang/rust#40535 2017-03-21 16:34:56 -04:00
Austin Bonander
a906d9912b
Correctly get source for metadata crate type;
replace `unwrap()` with `expect()`
2017-03-21 16:34:56 -04:00
Alex Burka
7551e715dc
add test for nested macro def (#31946)
Adds a test for issue #31946 which was fixed a while ago.
2017-03-21 16:27:35 -04:00
omtcyfz
71020e3836 Nit: LLVM & Clang latest version is 4.0 2017-03-21 16:26:35 -04:00
Jeffrey Seyfried
678e882ce2
Check for conflicts between macros 1.0 exports (#[macro_export], #[macro_reexport])
and macros 2.0 exports (`pub use` macro re-exports and `pub macro` (once implemented)
at the crate root.
2017-03-21 16:23:18 -04:00
Guillaume Gomez
f53172287a Add whitespace around "=" in assoc items 2017-03-21 16:22:15 -04:00
Guillaume Gomez
ed5702fc58 Fix invalid linking in iter docs 2017-03-21 16:18:36 -04:00
Sam Whited
49db656b06 str: Make docs consistently punctuated 2017-03-21 16:09:31 -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