Commit Graph

78153 Commits

Author SHA1 Message Date
Isaac Whitfield
89a8f2c103 Remove shared access to DepGraph::work_products 2018-05-11 08:09:53 -07:00
leonardo.yvens
587566eda7 Fix fn main() -> impl Trait for non-Termination trait
Fixes #50595.

This bug currently affects stable. Why I think we can go for hard error:

- It will in stable for at most one cycle and there is no legitimate
reason to abuse it, nor any known uses in the wild.

- It only affects `bin` crates (which have a `main`), so there is
little practical difference between a hard error or a deny lint, both
are a one line fix.

The fix was to just unshadow a variable. Thanks @nikomatsakis for the
mentoring!

r? @nikomatsakis
2018-05-11 11:29:04 -03:00
bors
fe63e479d1 Auto merge of #50332 - Zoxc:interner-split, r=michaelwoerister
Only lookup types in one interner
2018-05-11 13:26:13 +00:00
Roman Stoliar
17c56d409e resolved merge conflict 2018-05-11 15:14:23 +03:00
Roman Stoliar
d9b71d2156 fixed double ref hint 2018-05-11 15:12:53 +03:00
Roman Stoliar
747d5d99cd [wip] fixed some error, added missing test 2018-05-11 15:12:53 +03:00
Roman Stoliar
56fbc63456 unary op filter, dereference hint 2018-05-11 15:12:53 +03:00
Roman Stoliar
2f6945c776 added missing implementation hint 2018-05-11 15:12:30 +03:00
Oliver Schneider
847bb14ee7
Update the clippy and miri submodules 2018-05-11 14:11:06 +02:00
John Kåre Alsaker
0aa92acda7 Add a query to convert from ConstValue to Allocation 2018-05-11 13:01:44 +02:00
John Kåre Alsaker
fdd9787777 Introduce ConstValue and use it instead of miri's Value for constant values 2018-05-11 13:01:44 +02:00
bors
41707d8df9 Auto merge of #50620 - alexcrichton:change-names-again, r=nikomatsakis
Rename the 2018 edition lint names

* `rust_2018_breakage` -> `rust_2018_compatibility` - the lint for ensuring
  that your code, in the 2015 edition, is compatible with the 2018 edition's
  semantics. This is required to pass *before* you enable the 2018 edition.
* `rust_2018_migration` -> `rust_2018_idioms` - the lint for writing idiomatic
  code after you've already enabled the 2018 edition
2018-05-11 07:28:51 +00:00
Johannes Nixdorf
490d05055a compiletest: escape CXX the same way as CC for MSVC 2018-05-11 09:02:14 +02:00
Johannes Nixdorf
bd94bf5738 Add a test for issue 36710. 2018-05-11 09:02:14 +02:00
bors
6923fb512a Auto merge of #50609 - alexcrichton:no-nll-preview, r=nikomatsakis
Remove `nll` from `rust_2018_preview`

NLL isn't quite ready yet so gonna hold off on inserting it into the preview.
2018-05-11 04:45:25 +00:00
kennytm
c3b23b3b14
AppVeyor: Dump crash log on failure. 2018-05-11 12:30:50 +08:00
Zack M. Davis
7006018745 don't make crazy suggestion for unreachable braced pub-use
The Higher Intermediate Representation doesn't have spans for visibility
keywords, so we were assuming that the first whitespace-delimited token
in the item span was the `pub` to be weakened. This doesn't work for
brace-grouped `use`s, which get lowered as if they were several
individual `use` statements, but with spans that only cover the braced
path-segments. Constructing a correct suggestion here presents some
challenges—until someone works those out, we can at least protect the
dignity of our compiler marking the suggestion for `use` items as
potentially incorrect.

This resolves #50455 (but again, it would be desirable in the future to
make a correct suggestion instead of copping out like this).
2018-05-10 20:48:18 -07:00
bors
4e5a155a93 Auto merge of #50440 - nikomatsakis:single-use-lifetimes, r=cramertj
Improve single-use and zero-use lifetime lints

The code now correctly identifies *when* to lint -- or more correctly, anyhow -- but it doesn't yet offer suggestions for how to fix.

(I just remembered when writing this I had meant to go back over some of these cases around e.g. impl Trait and double check that everything is right...)

cc #44752

r? @cramertj
2018-05-11 02:14:25 +00:00
Niko Matsakis
6f98ee95d8 ensure lint are issued in a stable order 2018-05-10 19:39:00 -04:00
bors
a006328126 Auto merge of #50611 - alexcrichton:rollup, r=alexcrichton
Rollup of 18 pull requests

Successful merges:

 - #49423 (Extend tests for RFC1598 (GAT))
 - #50010 (Give SliceIndex impls a test suite of girth befitting the implementation (and fix a UTF8 boundary check))
 - #50447 (Fix update-references for tests within subdirectories.)
 - #50514 (Pull in a wasm fix from LLVM upstream)
 - #50524 (Make DepGraph::previous_work_products immutable)
 - #50532 (Don't use Lock for heavily accessed CrateMetadata::cnum_map.)
 - #50538 ( Make CrateNum allocation more thread-safe. )
 - #50564 (Inline `Span` methods.)
 - #50565 (Use SmallVec for DepNodeIndex within dep_graph.)
 - #50569 (Allow for specifying a linker plugin for cross-language LTO)
 - #50572 (Clarify in the docs that `mul_add` is not always faster.)
 - #50574 (add fn `into_inner(self) -> (Idx, Idx)` to RangeInclusive (#49022))
 - #50575 (std: Avoid `ptr::copy` if unnecessary in `vec::Drain`)
 - #50588 (Move "See also" disambiguation links for primitive types to top)
 - #50590 (Fix tuple struct field spans)
 - #50591 (Restore RawVec::reserve* documentation)
 - #50598 (Remove unnecessary mutable borrow and resizing in DepGraph::serialize)
 - #50606 (Retry when downloading the Docker cache.)

Failed merges:

 - #50161 (added missing implementation hint)
 - #50558 (Remove all reference to DepGraph::work_products)
2018-05-10 23:33:13 +00:00
Alex Crichton
2c5d13dc9c Skip a memory-hungry test that OOMs
Attempting to fix https://travis-ci.org/rust-lang/rust/jobs/377407894 via some
selective ignoring tests
2018-05-10 14:11:17 -07:00
bors
acd3871ba1 Auto merge of #50331 - MartinHusemann:master, r=Kimundi
Map the stack guard page with max protection on NetBSD

On NetBSD the initial mmap() protection of a mapping can not be made
less restrictive with mprotect().

So when mapping a stack guard page, use the maximum protection
we ever want to use, then mprotect() it to the permission we
want it to have initially.

Fixes #50313
2018-05-10 21:02:24 +00:00
Roman Stoliar
4d8d0a6f85 const time
added rustc_const_unstable attribute

extended tests

added conversion test

fixed tidy test

added feature attribute
2018-05-10 22:10:11 +03:00
Aaron DeVore
2ae8accd24 fs::write: Add example writing a &str 2018-05-10 11:47:31 -07:00
Eduard-Mihai Burtescu
9235c9ff46 rustc: leave space for fields of uninhabited types to allow partial initialization. 2018-05-10 21:30:06 +03:00
Alex Crichton
d636aec351 Rename the 2018 edition lint names
* `rust_2018_breakage` -> `rust_2018_compatibility` - the lint for ensuring
  that your code, in the 2015 edition, is compatible with the 2018 edition's
  semantics. This is required to pass *before* you enable the 2018 edition.
* `rust_2018_migration` -> `rust_2018_idioms` - the lint for writing idiomatic
  code after you've already enabled the 2018 edition
2018-05-10 11:28:11 -07:00
Alex Crichton
694ba9c04b
Rollup merge of #50606 - kennytm:retry-docker-cache, r=alexcrichton
Retry when downloading the Docker cache.

As a safety measure, prevent spuriously needing to rebuild the docker image in case the network was reset while downloading.

Also, adjusted the retry function to insert a sleep between retries, because retrying immediately will often just hit the same issue.
2018-05-10 11:35:38 -05:00
Alex Crichton
74e731fcb0
Rollup merge of #50598 - whitfin:unnecessary-mut-borrow, r=michaelwoerister
Remove unnecessary mutable borrow and resizing in DepGraph::serialize

I might be mistaken, but I noticed this whilst in this file for something else. It appears that this mutable borrow is unnecessary and since it's locking it should be removed. The resizing looks redundant since nothing additional is added to the fingerprints in this function, so that can also be removed.
2018-05-10 11:35:37 -05:00
Alex Crichton
8b5f692104
Rollup merge of #50591 - glandium:cleanup, r=dtolnay
Restore RawVec::reserve* documentation

When the RawVec::try_reserve* methods were added, they took the place of
the ::reserve* methods in the source file, and new ::reserve* methods
wrapping the new try_reserve* methods were created. But the
documentation didn't move along, such that:
 - reserve_* methods are barely documented.
 - try_reserve_* methods have unmodified documentation from reserve_*,
   such that their documentation indicate they are panicking/aborting.

This moves the documentation back to the right methods, with a
placeholder documentation for the try_reserve* methods.
2018-05-10 11:35:35 -05:00
Alex Crichton
1f1c65de4a
Rollup merge of #50590 - estebank:off-by-one, r=nikomatsakis
Fix tuple struct field spans

Fix #50578. Will have a merge conflict with #50536.
2018-05-10 11:35:34 -05:00
Alex Crichton
c798cbbb2c
Rollup merge of #50588 - ExpHP:i-can-see-my-house-from-here, r=frewsxcv
Move "See also" disambiguation links for primitive types to top

Closes #50384.

<details>
<summary>Images</summary>

![rust-slice](https://user-images.githubusercontent.com/1411280/39843148-caa41c3e-53b7-11e8-8123-b57c25a4d9e0.png)

![rust-isize](https://user-images.githubusercontent.com/1411280/39843146-ca94b384-53b7-11e8-85f3-3f5e5d353a05.png)

</details>

r? @steveklabnik
2018-05-10 11:35:33 -05:00
Alex Crichton
44f8b4d5be
Rollup merge of #50575 - alexcrichton:faster-drain-drop, r=sfackler
std: Avoid `ptr::copy` if unnecessary in `vec::Drain`

This commit is spawned out of a performance regression investigation in #50496.
In tracking down this regression it turned out that the `expand_statements`
function in the compiler was taking quite a long time. Further investigation
showed two key properties:

* The function was "fast" on glibc 2.24 and slow on glibc 2.23
* The hottest function was memmove from glibc

Combined together it looked like glibc gained an optimization to the memmove
function in 2.24. Ideally we don't want to rely on this optimization, so I
wanted to dig further to see what was happening.

The hottest part of `expand_statements` was `Drop for Drain` in the call to
`splice` where we insert new statements into the original vector. This *should*
be a cheap operation because we're draining and replacing iterators of the exact
same length, but under the hood memmove was being called a lot, causing a
slowdown on glibc 2.23.

It turns out that at least one of the optimizations in glibc 2.24 was that
`memmove` where the src/dst are equal becomes much faster. [This program][prog]
executes in ~2.5s against glibc 2.23 and ~0.3s against glibc 2.24, exhibiting
how glibc 2.24 is optimizing `memmove` if the src/dst are equal.

And all that brings us to what this commit itself is doing. The change here is
purely to `Drop for Drain` to avoid the call to `ptr::copy` if the region being
copied doesn't actually need to be copied. For normal usage of just `Drain`
itself this check isn't really necessary, but because `Splice` internally
contains `Drain` this provides a nice speed boost on glibc 2.23. Overall this
should fix the regression seen in #50496 on glibc 2.23 and also fix the
regression on Windows where `memmove` looks to not have this optimization.

Note that the way `splice` was called in `expand_statements` would cause a
quadratic number of elements to be copied via `memmove` which is likely why the
tuple-stress benchmark showed such a severe regression.

Closes #50496

[prog]: https://gist.github.com/alexcrichton/c05bc51c6771bba5ae5b57561a6c1cd3
2018-05-10 11:35:32 -05:00
Alex Crichton
445e53e434
Rollup merge of #50574 - s3bk:range_inclusive_into_inner, r=SimonSapin
add fn `into_inner(self) -> (Idx, Idx)` to RangeInclusive (#49022)

adds `into_inner(self) -> (Idx, Idx)` to RangeInclusive
https://github.com/rust-lang/rust/issues/49022#issuecomment-387645176
2018-05-10 11:35:31 -05:00
Alex Crichton
be6fab8ca8
Rollup merge of #50572 - frewsxcv:frewsxcv-fma, r=sfackler
Clarify in the docs that `mul_add` is not always faster.

Fixes https://github.com/rust-lang/rust/issues/49842.

Other resources:

- https://users.rust-lang.org/t/why-does-the-mul-add-method-produce-a-more-accurate-result-with-better-performance/1626
- https://en.wikipedia.org/wiki/Multiply%E2%80%93accumulate_operation
2018-05-10 11:35:29 -05:00
Alex Crichton
dd40277d0f
Rollup merge of #50569 - michaelwoerister:cross-lang-lto-2, r=alexcrichton
Allow for specifying a linker plugin for cross-language LTO

This PR makes the `-Zcross-lang-lto` flag optionally take the path to the `LLVMgold.so` linker plugin. If this path is specified, `rustc` will invoke the linker with the correct arguments (i.e. `-plugin` and various `-plugin-opt`s).

This can be used to ergonomically enable cross-language LTO for Rust programs with C/C++ dependencies:
```
clang -O2 test.c -otest.o -c -flto=thin
llvm-ar -rv libxxx.a test.o
rustc -L. main.rs -Zcross-lang-lto=/usr/lib64/LLVMgold.so -O -Clink-arg=-fuse-ld=gold
```

- Note that in theory this should work with Gold, LLD, and newer versions of binutils' LD but on my current system I could only get it to work with Gold.
- Also note that this will work best if the Clang version and Rust's LLVM version are close enough. Clang 6.0 works well with the current nightly.

r? @alexcrichton
2018-05-10 11:35:28 -05:00
Alex Crichton
e23ec4b6f0
Rollup merge of #50565 - nnethercote:try_mark_green, r=michaelwoerister
Use SmallVec for DepNodeIndex within dep_graph.

This avoids a decent number of allocations, enough to speed up
incremental runs of many rustc-benchmarks, the best by 2%.

Here are the rustc-perf benchmarks that showed an improvement of at least 1% on one run:
```
unused-warnings-check
	avg: -1.7%	min: -2.4%	max: 0.0%
unused-warnings-opt
	avg: -1.4%	min: -2.0%	max: 0.0%
unused-warnings
	avg: -1.4%	min: -2.0%	max: -0.0%
tokio-webpush-simple-check
	avg: -1.0%	min: -1.7%	max: 0.0%
futures-opt
	avg: -0.9%	min: -1.6%	max: 0.0%
encoding
	avg: -1.2%	min: -1.6%	max: -0.6%
encoding-check
	avg: -0.9%	min: -1.6%	max: 0.0%
encoding-opt
	avg: -0.8%	min: -1.6%	max: -0.1%
futures
	avg: -0.9%	min: -1.5%	max: 0.0%
futures-check
	avg: -0.9%	min: -1.5%	max: 0.1%
regression-31157-check
	avg: -0.9%	min: -1.5%	max: 0.0%
regex
	avg: -0.6%	min: -1.4%	max: 0.0%
regression-31157-opt
	avg: -0.5%	min: -1.4%	max: 0.1%
regression-31157
	avg: -0.7%	min: -1.4%	max: 0.2%
regex-opt
	avg: -0.6%	min: -1.4%	max: 0.1%
hyper-check
	avg: -0.8%	min: -1.4%	max: -0.1%
regex-check
	avg: -1.0%	min: -1.4%	max: 0.0%
hyper-opt
	avg: -0.7%	min: -1.4%	max: -0.1%
hyper
	avg: -0.7%	min: -1.3%	max: 0.1%
piston-image-opt
	avg: -0.4%	min: -1.3%	max: 0.0%
tokio-webpush-simple-opt
	avg: -0.3%	min: -1.3%	max: 0.0%
piston-image-check
	avg: -0.5%	min: -1.3%	max: -0.0%
syn-opt
	avg: -0.5%	min: -1.3%	max: 0.0%
clap-rs-check
	avg: -0.3%	min: -1.3%	max: 0.2%
piston-image
	avg: -0.5%	min: -1.2%	max: 0.1%
syn
	avg: -0.5%	min: -1.2%	max: 0.1%
syn-check
	avg: -0.6%	min: -1.2%	max: -0.1%
issue-46449-opt
	avg: -0.4%	min: -1.2%	max: -0.1%
parser-check
	avg: -0.7%	min: -1.2%	max: 0.1%
issue-46449
	avg: -0.5%	min: -1.2%	max: -0.0%
```
2018-05-10 11:35:27 -05:00
Alex Crichton
a77ba86424
Rollup merge of #50564 - nnethercote:inline-Span-methods, r=petrochenkov
Inline `Span` methods.

Because they are simple and hot.

This change speeds up some incremental runs of a few rustc-perf
benchmarks, the best by 3%.

Here are the ones with a speedup of at least 1%:
```
coercions
        avg: -1.1%      min: -3.4%      max: -0.2%
html5ever-opt
        avg: -0.8%      min: -1.7%      max: -0.2%
clap-rs-check
        avg: -0.3%      min: -1.4%      max: 0.7%
html5ever
        avg: -0.7%      min: -1.2%      max: -0.4%
html5ever-check
        avg: -0.9%      min: -1.1%      max: -0.8%
clap-rs
        avg: -0.4%      min: -1.1%      max: -0.1%
crates.io-check
        avg: -0.8%      min: -1.0%      max: -0.6%
serde-opt
        avg: -0.6%      min: -1.0%      max: -0.3%
```
2018-05-10 11:35:26 -05:00
Alex Crichton
4199a6c1ee
Rollup merge of #50538 - michaelwoerister:atomic-cnums, r=Zoxc
Make CrateNum allocation more thread-safe.

This PR makes sure that we can't have race conditions when assigning CrateNums. It's a slight improvement but a larger refactoring of the CrateStore/CrateLoader infrastructure would be good, I think.

r? @Zoxc
2018-05-10 11:35:24 -05:00
Alex Crichton
296f9524f2
Rollup merge of #50532 - michaelwoerister:lockless-cnum-map, r=Zoxc
Don't use Lock for heavily accessed CrateMetadata::cnum_map.

The `cnum_map` in `CrateMetadata` is used for two things:
1. to map `CrateNums` between crates (used a lot during decoding)
2. to construct the (reverse) post order of the crate graph

For the second case, we need to modify the map after the fact, which is why the map is wrapped in a `Lock`. This is bad for the first case, which does not need the modification and does lots of small reads from the map.

This PR splits case (2) out into a separate `dependencies` field. This allows to make the `cnum_map` immutable (and shifts the interior mutability to a less busy data structure).

Fixes #50502

r? @Zoxc
2018-05-10 11:35:23 -05:00
Alex Crichton
bb130ce3ce
Rollup merge of #50524 - wesleywiser:immutable_prev_work_products, r=michaelwoerister
Make DepGraph::previous_work_products immutable

Fixes #50501

r? @michaelwoerister
2018-05-10 11:35:21 -05:00
Alex Crichton
4c4396cb41
Rollup merge of #50514 - alexcrichton:update-llvm, r=kennytm
Pull in a wasm fix from LLVM upstream

This pulls in a fix for https://bugs.llvm.org/show_bug.cgi?id=36564 which has
already landed in upstream LLVM and should...

Closes rust-lang-nursery/rust-wasm#168
2018-05-10 11:35:20 -05:00
Alex Crichton
7bd4fdadfe
Rollup merge of #50447 - ehuss:fix-update-references, r=alexcrichton
Fix update-references for tests within subdirectories.

Fixes #50438.

I'll make this more robust later for #49815.
2018-05-10 11:35:19 -05:00
Alex Crichton
cff1a263c9
Rollup merge of #50010 - ExpHP:slice-bounds, r=alexcrichton
Give SliceIndex impls a test suite of girth befitting the implementation (and fix a UTF8 boundary check)

So one day I was writing something in my codebase that basically amounted to `impl SliceIndex for (Bound<usize>, Bound<usize>)`, and I said to myself:

*Boy, gee, golly!  I never realized bounds checking was so tricky!*

At some point when I had around 60 lines of tests for it, I decided to go see how the standard library does it to see if I missed any edge cases. ...That's when I discovered that libcore only had about 40 lines of tests for slicing altogether, and none of them even used `..=`.

---

This PR includes:

* **Literally the first appearance of the word `get_unchecked_mut` in any directory named `test` or `tests`.**
* Likewise the first appearance of `get_mut` used with _any type of range argument_ in these directories.
* Tests for the panics on overflow with `..=`.
    * I wanted to test on `[(); usize::MAX]` as well but that takes linear time in debug mode </3
* A horrible and ugly test-generating macro for the `should_panic` tests that increases the DRYness by a single order of magnitude (which IMO wasn't enough, but I didn't want to go any further and risk making the tests inaccessible to next guy).
* Same stuff for str!
    * Actually, the existing `str` tests were pretty good. I just helped filled in the holes.
* [A fix for the bug it caught](https://github.com/rust-lang/rust/issues/50002).  (only one ~~sadly~~)
2018-05-10 11:35:17 -05:00
Alex Crichton
ecd9898b60
Rollup merge of #49423 - gavento:gavento-dev, r=nikomatsakis
Extend tests for RFC1598 (GAT)

More GAT tests, namely some usage for `Iterable` and `StreamingIterator`, shadowing (lifetimes and type params), `Collection<T>` and `CollectionFamily` from [the series](http://smallcultfollowing.com/babysteps/blog/2016/11/03/associated-type-constructors-part-2-family-traits/) with default associated types. Tracking issue: #44265

r? @nikomatsakis

Wrong GAT argument numbers / kinds and default values are next.
2018-05-10 11:35:16 -05:00
bors
9e3caa23f9 Auto merge of #49823 - Zoxc:term-str, r=alexcrichton
Remove usages of Term::as_str and mark it for removal

Returning references to rustc internal data structures is a bad idea since their lifetimes are unrelated to the lifetimes of proc_macro values.

See https://github.com/rust-lang/rust/pull/46972 and the `Taming thread-local storage` section of https://internals.rust-lang.org/t/parallelizing-rustc-using-rayon/6606

r? @alexcrichton
2018-05-10 16:27:32 +00:00
Esteban Küber
85f57389bf Fix tuple struct field spans 2018-05-10 09:15:47 -07:00
Alex Crichton
98eab06648 Remove nll from rust_2018_preview
NLL isn't quite ready yet so gonna hold off on inserting it into the preview.
2018-05-10 08:44:20 -07:00
John Kåre Alsaker
ca32340367 Allocate Symbol strings from an arena 2018-05-10 16:27:46 +02:00
bors
0a223d139c Auto merge of #50395 - Zoxc:small-tys, r=michaelwoerister
Optimize layout of TypeVariants

This makes references to `Slice` use thin pointers by storing the slice length in the slice itself. `GeneratorInterior` is replaced by storing the movability of generators in `TyGenerator` and the interior witness is stored in `GeneratorSubsts` (which is just a wrapper around `&'tcx Substs`, like `ClosureSubsts`). Finally the fields of `TypeAndMut` is stored inline in `TyRef`. These changes combine to reduce `TypeVariants` from 48 bytes to 24 bytes on x86_64.

r? @michaelwoerister
2018-05-10 14:14:35 +00:00
Alex Crichton
12446dd52c Pull in a wasm fix from LLVM upstream
This pulls in a fix for https://bugs.llvm.org/show_bug.cgi?id=36564 which has
already landed in upstream LLVM and should...

Closes rust-lang-nursery/rust-wasm#168
2018-05-10 07:06:18 -07:00