Commit graph

65373 commits

Author SHA1 Message Date
bors 05b5797664 Auto merge of #42882 - stjepang:improve-sort-tests-and-benches, r=alexcrichton
Improve tests and benchmarks for slice::sort and slice::sort_unstable

This PR just hardens the tests and improves benchmarks.
More specifically:

1. Benchmarks don't generate vectors in `Bencher::iter` loops, but simply clone pregenerated vectors.
2. Benchmark `*_strings` doesn't allocate Strings in `Bencher::iter` loops, but merely clones a `Vec<&str>`.
3. Benchmarks use seeded `XorShiftRng` to be more consistent.
4. Additional tests for `slice::sort` are added, which test sorting on slices with several ascending/descending runs. The implementation identifies such runs so it's a good idea to test that scenario a bit.
5. More checks are added to `run-pass/vector-sort-panic-safe.rs`. Sort algorithms copy elements around a lot (merge sort uses an auxilliary buffer and pdqsort copies the pivot onto the stack before partitioning, then writes it back into the slice). If elements that are being sorted are internally mutable and comparison function mutates them, it is important to make sure that sort algorithms always use the latest "versions" of elements. New checks verify that this is true for both `slice::sort` and `slice::sort_unstable`.

As a side note, all of those improvements were made as part of the parallel sorts PR in Rayon (nikomatsakis/rayon#379) and now I'm backporting them into libcore/libstd.

r? @alexcrichton
2017-07-01 13:31:32 +00:00
bors a5d34e1d03 Auto merge of #42991 - sfackler:unstable-rangeargument, r=alexcrichton
Revert "Stabilize RangeArgument"

This reverts commit 143206d54d.

From the discussion in #30877 it seems like this is premature.
2017-07-01 11:21:53 +00:00
bors 7a2c09b6f5 Auto merge of #42977 - Keruspe:master, r=alexcrichton
rustbuild: set __CARGO_DEFAULT_LIB_METADATA to channel

Also, update the cargo submodule to handle the new value.
2017-07-01 09:10:13 +00:00
bors d41b791c1a Auto merge of #42971 - stepancheg:ir-demangle, r=nagisa
When writing LLVM IR output demangled fn name in comments

`--emit=llvm-ir` looks like this now:

```
; <alloc::vec::Vec<T> as core::ops::index::IndexMut<core::ops::range::RangeFull>>::index_mut
; Function Attrs: inlinehint uwtable
define internal { i8*, i64 } @"_ZN106_$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..index..IndexMut$LT$core..ops..range..RangeFull$GT$$GT$9index_mut17h7f7b576609f30262E"(%"alloc::vec::Vec<u8>"* dereferenceable(24)) unnamed_addr #0 {
start:
  ...
```

cc https://github.com/integer32llc/rust-playground/issues/15
2017-07-01 05:52:08 +00:00
bors 4a92ae2524 Auto merge of #42896 - llogiq:clippy_compiletest, r=alexcrichton
fixed some clippy warnings in compiletest

This is mainly readability stuff. Whenever the `clone_ref` lint asked me to clone the dereferenced object, I removed the `.clone()` instead, relying on the fact that it has worked so far and the immutable borrow ensures that the value won't change.
2017-07-01 03:26:29 +00:00
Stepan Koltsov b62bdaafe0 When writing LLVM IR output demangled fn name in comments
`--emit=llvm-ir` looks like this now:

```
; <alloc::vec::Vec<T> as core::ops::index::IndexMut<core::ops::range::RangeFull>>::index_mut
; Function Attrs: inlinehint uwtable
define internal { i8*, i64 } @"_ZN106_$LT$alloc..vec..Vec$LT$T$GT$$u20$as$u20$core..ops..index..IndexMut$LT$core..ops..range..RangeFull$GT$$GT$9index_mut17h7f7b576609f30262E"(%"alloc::vec::Vec<u8>"* dereferenceable(24)) unnamed_addr #0 {
start:
  ...
```

cc https://github.com/integer32llc/rust-playground/issues/15
2017-07-01 03:16:43 +03:00
bors 7d89b20669 Auto merge of #42995 - GuillaumeGomez:rollup, r=GuillaumeGomez
Rollup of 6 pull requests

- Successful merges: #42669, #42911, #42925, #42957, #42985, #42987
- Failed merges: #42936
2017-06-30 22:14:56 +00:00
Guillaume Gomez bda06de5dc Rollup merge of #42987 - cuviper:iterator_for_each, r=Mark-Simulacrum
Track `iterator_for_each` in #42986

None
2017-06-30 22:44:48 +02:00
Guillaume Gomez 953d679362 Rollup merge of #42985 - venkatagiri:issue_42444, r=Mark-Simulacrum
rustc_llvm: re-run build script when env var LLVM_CONFIG changes

This removes the changes done in #42429 and use the newly introduced `cargo:rerun-if-env-changed` in https://github.com/rust-lang/cargo/pull/4125.
As `LLVM_CONFIG` env var points to the `llvm-config` and changes when it gets configured in `config.toml` or removed from it, we can re-run the build script if this env var changes.

closes #42444

r? @alexcrichton
2017-06-30 22:44:47 +02:00
Guillaume Gomez bbdb21efbf Rollup merge of #42957 - GuillaumeGomez:add-e0619, r=nikomatsakis
Add E0619 error explanation

r? @eddyb
2017-06-30 22:44:46 +02:00
Guillaume Gomez db004d4f55 Rollup merge of #42925 - tbu-:pr_document_file_open_errors, r=GuillaumeGomez
Document possible `io::ErrorKind`s of `fs::open`

Try to make clear that this isn't an API guarantee for now, as we likely
want to refine these errors in the future, e.g. `ENOSPC` "No space left
on device".

CC #40322
2017-06-30 22:44:45 +02:00
Guillaume Gomez ed04f56e9d Rollup merge of #42911 - nrc:rls-update, r=brson
Update RLS submodule
2017-06-30 22:44:44 +02:00
Guillaume Gomez fc0fb0328b Rollup merge of #42669 - gaurikholkar:master, r=nikomatsakis
Adding diagnostic code 0611 for lifetime errors with one named, one anonymous lifetime parameter

This is a fix for #42517
Note that this only handles the above case for **function declarations** and **traits**.
`impl items` and `closures` will be handled in a later PR.
Example
```
fn foo<'a>(x: &i32, y: &'a i32) -> &'a i32 {
    if x > y { x } else { y }
}
```
now displays the following error message. ui tests have been added for the same.
```
error[E0611]: explicit lifetime required in the type of `x`
11 | fn foo<'a>(x: &i32, y: &'a i32) -> &'a i32 {
   |                     ^ consider changing the type of `x` to `&'a i32`
12 |     if x > y { x } else { y }
   |                  - lifetime `'a` required
```
#42516
r? @nikomatsakis
2017-06-30 22:44:43 +02:00
Guillaume Gomez 162b5a3475 Fix error codes mixup 2017-06-30 22:43:35 +02:00
Guillaume Gomez aa3fa25476 Add E0619 error explanation 2017-06-30 22:38:57 +02:00
bors 37849a002e Auto merge of #42969 - arielb1:struct-err, r=eddyb
mem_categorization: handle type-based paths in variant patterns

These can't be used in correct programs, but must be handled in order to
prevent ICEs.

Fixes #42880.

r? @eddyb
2017-06-30 19:51:19 +00:00
Steven Fackler 0a9c13624d Revert "Stabilize RangeArgument"
This reverts commit 143206d54d.
2017-06-30 08:34:53 -10:00
Venkata Giri Reddy 4f13da7362 rustc_{a,l,m,t}san: re-run build script if env var LLVM_CONFIG changes 2017-06-30 17:35:00 +00:00
Josh Stone 741dc2bad5 Track iterator_for_each in #42986 2017-06-30 10:21:46 -07:00
Venkata Giri Reddy 401614b75a rustc_llvm: re-run build script when env var LLVM_CONFIG changes 2017-06-30 16:55:32 +00:00
bors e72580cf09 Auto merge of #42807 - arielb1:consistent-coercion, r=eddyb
Coerce fields to the expected field type

Fully fixes #31260.

This needs a crater run. I was supposed to do this last month but it slipped. Let's get this done.
2017-06-30 13:39:25 +00:00
gaurikholkar 37a88f478d rename compile-fail test 2017-06-30 02:33:33 -07:00
bors 919c4a6707 Auto merge of #42782 - cuviper:iterator_for_each, r=alexcrichton
Add `Iterator::for_each`

This works like a `for` loop in functional style, applying a closure to
every item in the `Iterator`.  It doesn't allow `break`/`continue` like
a `for` loop, nor any other control flow outside the closure, but it may
be a more legible style for tying up the end of a long iterator chain.

This was tried before in #14911, but nobody made the case for using it
with longer iterators.  There was also `Iterator::advance` at that time
which was more capable than `for_each`, but that no longer exists.

The `itertools` crate has `Itertools::foreach` with the same behavior,
but thankfully the names won't collide.  The `rayon` crate also has a
`ParallelIterator::for_each` where simple `for` loops aren't possible.

> I really wish we had `for_each` on seq iterators. Having to use a
> dummy operation is annoying.  - [@nikomatsakis][1]

[1]: https://github.com/nikomatsakis/rayon/pull/367#issuecomment-308455185
2017-06-30 09:15:21 +00:00
Niko Matsakis a43377773f move ERROR line 2017-06-30 05:11:28 -04:00
Marc-Antoine Perennou 93528d9072 update cargo submodule
This brings in several fixes and the new handling of __CARGO_DEFAULT_LIB_METADATA

Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2017-06-30 09:38:13 +02:00
Marc-Antoine Perennou d23a62ba71 rustbuild: set __CARGO_DEFAULT_LIB_METADATA to channel
Signed-off-by: Marc-Antoine Perennou <Marc-Antoine@Perennou.com>
2017-06-30 09:16:00 +02:00
bors 4c5b437176 Auto merge of #42930 - arielb1:llvm-next, r=alexcrichton
Rebase LLVM on top of LLVM 4.0.1

Fixes #42893.

Please don't backport this to beta as-is - I'm not sure I want rust-lang/llvm#84 to sneak to beta before it gets sufficient testing.

r? @alexcrichton
2017-06-30 06:17:52 +00:00
bors a4c68c62f0 Auto merge of #42924 - pnkfelix:mir-dataflow, r=arielb1
Shift mir-dataflow from `rustc_borrowck` to `rustc_mir` crate.

Shift mir-dataflow from `rustc_borrowck` to `rustc_mir` crate.

Turn `elaborate_drops` and `rustc_peek` implementations into MIR passes that also live in `rustc_mir` crate.

Rewire things so `rustc_driver` uses the `ElaborateDrops` from `rustc_mir` crate.

(This PR is another baby step for mir-borrowck; it is a piece of work that other people want to rebase their stuff on top of, namely developers who are doing other dataflow analyses on top of MIR.)

I have deliberately architected this PR in an attempt to minimize the number of actual code changes. The majority of the diff should be little more than changes to mod and use declarations, as well as a few visibility promotions to pub(crate) when a declaration was moved downward in the module hierarchy.

(I have no problem with other PR's that move declarations around to try to clean this up; my goal was to ensure that the diff here was as small as possible, to make the review nearly trivial.)
2017-06-30 03:56:33 +00:00
bors 5eef7c7966 Auto merge of #42902 - petrochenkov:keydcrate, r=jseyfried
Make `$crate` a keyword

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

r? @jseyfried or @nrc
2017-06-29 23:48:17 +00:00
Niko Matsakis cb26a25d4b tweak comments in E0495.rs 2017-06-29 18:02:31 -04:00
Andre Bogus 7be171db70 fix a stray semicolon 2017-06-29 23:38:13 +02:00
gaurikholkar 4abcf28d2b adding compile-fail test 2017-06-29 14:13:53 -07:00
bors 3bfc18a961 Auto merge of #42900 - sfackler:jemalloc-tweak, r=alexcrichton
Stop disabling fill in jemalloc

The underlying bug has been fixed for over 2 years!

r? @alexcrichton
2017-06-29 20:04:14 +00:00
Ariel Ben-Yehuda 1ea6813a61 mem_categorization: handle type-based paths in variant patterns
These can't be used in correct programs, but must be handled in order to
prevent ICEs.

Fixes #42880.
2017-06-29 20:20:14 +03:00
bors 686ec28cea Auto merge of #42527 - qnighy:unsized-tuple-coercions, r=arielb1
Unsized tuple coercions

Part of #18469. Fixes #32702.

#37685 and #34451 might also be related.

This PR does the following:

- Introduce explicit `Sized` constraints on tuple initializers, similar to that of record-struct initializers. Not much relevant to the main contribution but I noticed this when making tests for unsized tuple coercions.
- Implement `(.., T): Unsize<(.., U)>` where `T: Unsize<U>`.
- Assume `(.., T)` is MaybeUnsizedUnivariant.
- Modify `src/librustc/ty/util.rs` and `src/librustc_trans/glue.rs` so that tuples and structs are uniformly traversed when translating.
2017-06-29 15:04:31 +00:00
gaurikholkar 5be4fa864a code fixes for error code use warning 2017-06-29 06:37:18 -07:00
gaurikholkar 5841021f07 conflict fixes 2017-06-29 06:37:18 -07:00
gaurikholkar e8b8f30373 Code review fixes 2017-06-29 06:37:18 -07:00
Niko Matsakis 95409016f8 remove fn main() { } from extended errors 2017-06-29 06:37:18 -07:00
gaurikholkar aebc4e0074 Changing the error code to E0621 2017-06-29 06:37:18 -07:00
gaurikholkar 82f25b32ae code review fixes 2017-06-29 06:37:18 -07:00
gaurikholkar a851e1e543 Adding changes to track anonymous region in self 2017-06-29 06:37:18 -07:00
gaurikholkar 2d99ffd11b track anonymous regions in return types, fix tidy errors 2017-06-29 06:37:18 -07:00
gaurikholkar 8fb6f74e57 Enabling E0611 for inherent functions 2017-06-29 06:37:18 -07:00
gaurikholkar ae92bd095c Interchange ^ and - 2017-06-29 06:37:18 -07:00
Niko Matsakis 4bed5f0094 update reference for test 2017-06-29 06:37:18 -07:00
gaurikholkar 5df7a2c863 Adding new ui test for trait impl 2017-06-29 06:37:18 -07:00
gaurikholkar 176225c4dd Adding diagnostic code 0611 for lifetime errors with one named, one anonymous lifetime parameter 2017-06-29 06:37:18 -07:00
Masaki Hara 94862c601b
Correct comments about unsizing regarding #40319. 2017-06-29 21:25:35 +09:00
Masaki Hara 141265dfe8
Give a tracking-issue number for unsized tuple coercion. 2017-06-29 21:25:35 +09:00