]> git.lizzy.rs Git - rust.git/log
rust.git
7 years agoAuto merge of #38217 - oli-obk:mir-for-all-and-all-for-mir, r=eddyb
bors [Sat, 10 Dec 2016 03:49:38 +0000 (03:49 +0000)]
Auto merge of #38217 - oli-obk:mir-for-all-and-all-for-mir, r=eddyb

add a -Z flag to guarantee that MIR is generated for all functions

r? @eddyb

cc @solson

7 years agoAuto merge of #38223 - rkruppe:llvm-stringref-fixes, r=alexcrichton
bors [Sat, 10 Dec 2016 00:34:13 +0000 (00:34 +0000)]
Auto merge of #38223 - rkruppe:llvm-stringref-fixes, r=alexcrichton

printf type correctness

The `%.*s` format specifier requires an int for the maximum size, but StringRef::size is a size_t

cc @shepmaster

7 years agoAuto merge of #38102 - nrc:save-bots, r=brson
bors [Fri, 9 Dec 2016 21:37:21 +0000 (21:37 +0000)]
Auto merge of #38102 - nrc:save-bots, r=brson

Create tar balls of save-analysis-api metadata for the standard libra…

…ries as part of `make dist`.

r? @alexcrichton

7 years agoAuto merge of #38203 - nrc:save-wr, r=eddyb
bors [Fri, 9 Dec 2016 18:43:33 +0000 (18:43 +0000)]
Auto merge of #38203 - nrc:save-wr, r=eddyb

save-analysis: fix a few generated code errors

7 years agoCreate tar balls of save-analysis-api metadata for the standard libraries as part...
Nick Cameron [Wed, 26 Oct 2016 22:41:56 +0000 (11:41 +1300)]
Create tar balls of save-analysis-api metadata for the standard libraries as part of `make dist`.

7 years agomove the check for instantiation from metadata encoding to the actual decision site
Oliver Schneider [Fri, 9 Dec 2016 16:29:01 +0000 (17:29 +0100)]
move the check for instantiation from metadata encoding to the actual decision site

before it was assumed that anything that had a MIR was fair game for local instatiation

7 years agoAuto merge of #38197 - mneumann:dragonfly-fixes-2016-12-06, r=alexcrichton
bors [Fri, 9 Dec 2016 15:45:41 +0000 (15:45 +0000)]
Auto merge of #38197 - mneumann:dragonfly-fixes-2016-12-06, r=alexcrichton

Fix current_exe() on DragonFly (again)

This is a follow up on [this pull request][1].

Since DragonFly 4.6.1 ([this commit][2]), the ```kern.proc.pathname```
sysctl works correctly, i.e. it does not return paths including a ```:```
(see [here][3]). Use it and don't try to fix old versions of DragonFly!
There are not many DragonFly installations out there that we can't
control and no one is compiling Rust from source. If someone wants to
run Rust on a pre-4.6.1 DragonFly system, the ports system should
provide a patch.

[1]: https://github.com/rust-lang/rust/pull/35494
[2]: https://gitweb.dragonflybsd.org/dragonfly.git/commit/726f7ca07e193db73635e9c4e24e40c96087d6d9
[3]: https://gist.github.com/mneumann/a2f6b6a0a03935b561d6185872a4b222

7 years agoenable checking for const fn without needing to go through `entry`
Oliver Schneider [Fri, 9 Dec 2016 15:31:53 +0000 (16:31 +0100)]
enable checking for const fn without needing to go through `entry`

7 years agoAuto merge of #38196 - rkruppe:llvm-archivewrapper-fwdcompat, r=alexcrichton
bors [Fri, 9 Dec 2016 12:52:42 +0000 (12:52 +0000)]
Auto merge of #38196 - rkruppe:llvm-archivewrapper-fwdcompat, r=alexcrichton

[LLVM 4.0] rustllvm archive support

Error handling is being transitioned from ErrorOr<T> to Expected<T> which has a different API and requires explicitly handling all errors

cc #37609

7 years agoremove double negation in comment
Oliver Schneider [Fri, 9 Dec 2016 10:27:45 +0000 (11:27 +0100)]
remove double negation in comment

7 years agoAuto merge of #38192 - stjepang:faster-sort-algorithm, r=bluss
bors [Fri, 9 Dec 2016 10:00:25 +0000 (10:00 +0000)]
Auto merge of #38192 - stjepang:faster-sort-algorithm, r=bluss

Implement a faster sort algorithm

Hi everyone, this is my first PR.

I've made some changes to the standard sort algorithm, starting out with a few tweaks here and there, but in the end this endeavour became a complete rewrite of it.

#### Summary

Changes:

* Improved performance, especially on partially sorted inputs.
* Performs less comparisons on both random and partially sorted inputs.
* Decreased the size of temporary memory: the new sort allocates 4x less.

Benchmark:

```
 name                                        out1 ns/iter          out2 ns/iter          diff ns/iter   diff %
 slice::bench::sort_large_ascending          85,323 (937 MB/s)     8,970 (8918 MB/s)          -76,353  -89.49%
 slice::bench::sort_large_big_ascending      2,135,297 (599 MB/s)  355,955 (3595 MB/s)     -1,779,342  -83.33%
 slice::bench::sort_large_big_descending     2,266,402 (564 MB/s)  416,479 (3073 MB/s)     -1,849,923  -81.62%
 slice::bench::sort_large_big_random         3,053,031 (419 MB/s)  1,921,389 (666 MB/s)    -1,131,642  -37.07%
 slice::bench::sort_large_descending         313,181 (255 MB/s)    14,725 (5432 MB/s)        -298,456  -95.30%
 slice::bench::sort_large_mostly_ascending   287,706 (278 MB/s)    243,204 (328 MB/s)         -44,502  -15.47%
 slice::bench::sort_large_mostly_descending  415,078 (192 MB/s)    271,028 (295 MB/s)        -144,050  -34.70%
 slice::bench::sort_large_random             545,872 (146 MB/s)    521,559 (153 MB/s)         -24,313   -4.45%
 slice::bench::sort_large_random_expensive   30,321,770 (2 MB/s)   23,533,735 (3 MB/s)     -6,788,035  -22.39%
 slice::bench::sort_medium_ascending         616 (1298 MB/s)       155 (5161 MB/s)               -461  -74.84%
 slice::bench::sort_medium_descending        1,952 (409 MB/s)      202 (3960 MB/s)             -1,750  -89.65%
 slice::bench::sort_medium_random            3,646 (219 MB/s)      3,421 (233 MB/s)              -225   -6.17%
 slice::bench::sort_small_ascending          39 (2051 MB/s)        34 (2352 MB/s)                  -5  -12.82%
 slice::bench::sort_small_big_ascending      96 (13333 MB/s)       96 (13333 MB/s)                  0    0.00%
 slice::bench::sort_small_big_descending     248 (5161 MB/s)       243 (5267 MB/s)                 -5   -2.02%
 slice::bench::sort_small_big_random         501 (2554 MB/s)       490 (2612 MB/s)                -11   -2.20%
 slice::bench::sort_small_descending         95 (842 MB/s)         63 (1269 MB/s)                 -32  -33.68%
 slice::bench::sort_small_random             372 (215 MB/s)        354 (225 MB/s)                 -18   -4.84%
```

#### Background

First, let me just do a quick brain dump to discuss what I learned along the way.

The official documentation says that the standard sort in Rust is a stable sort. This constraint is thus set in stone and immediately rules out many popular sorting algorithms. Essentially, the only algorithms we might even take into consideration are:

1. [Merge sort](https://en.wikipedia.org/wiki/Merge_sort)
2. [Block sort](https://en.wikipedia.org/wiki/Block_sort) (famous implementations are [WikiSort](https://github.com/BonzaiThePenguin/WikiSort) and [GrailSort](https://github.com/Mrrl/GrailSort))
3. [TimSort](https://en.wikipedia.org/wiki/Timsort)

Actually, all of those are just merge sort flavors. :) The current standard sort in Rust is a simple iterative merge sort. It has three problems. First, it's slow on partially sorted inputs (even though #29675 helped quite a bit). Second, it always makes around `log(n)` iterations copying the entire array between buffers, no matter what. Third, it allocates huge amounts of temporary memory (a buffer of size `2*n`, where `n` is the size of input).

The problem of auxilliary memory allocation is a tough one. Ideally, it would be best for our sort to allocate `O(1)` additional memory. This is what block sort (and it's variants) does. However, it's often very complicated (look at [this](https://github.com/BonzaiThePenguin/WikiSort/blob/master/WikiSort.cpp)) and even then performs rather poorly. The author of WikiSort claims good performance, but that must be taken with a grain of salt. It performs well in comparison to `std::stable_sort` in C++. It can even beat `std::sort` on partially sorted inputs, but on random inputs it's always far worse. My rule of thumb is: high performance, low memory overhead, stability - choose two.

TimSort is another option. It allocates a buffer of size `n/2`, which is not great, but acceptable. Performs extremelly well on partially sorted inputs. However, it seems pretty much all implementations suck on random inputs. I benchmarked implementations in [Rust](https://github.com/notriddle/rust-timsort), [C++](https://github.com/gfx/cpp-TimSort), and [D](https://github.com/dlang/phobos/blob/fd518eb310a9494cccf28c54892542b052c49669/std/algorithm/sorting.d#L2062). The results were a bit disappointing. It seems bad performance is due to complex galloping procedures in hot loops. Galloping noticeably improves performance on partially sorted inputs, but worsens it on random ones.

#### The new algorithm

Choosing the best algorithm is not easy. Plain merge sort is bad on partially sorted inputs. TimSort is bad on random inputs and block sort is even worse. However, if we take the main ideas from TimSort (intelligent merging strategy of sorted runs) and drop galloping, then we'll have great performance on random inputs and it won't be bad on partially sorted inputs either.

That is exactly what this new algorithm does. I can't call it TimSort, since it steals just a few of it's ideas. Complete TimSort would be a much more complex and elaborate implementation. In case we in the future figure out how to incorporate more of it's ideas into this implementation without crippling performance on random inputs, it's going to be very easy to extend. I also did several other minor improvements, like reworked insertion sort to make it faster.

There are also new, more thorough benchmarks and panic safety tests.

The final code is not terribly complex and has less unsafe code than I anticipated, but there's still plenty of it that should be carefully reviewed. I did my best at documenting non-obvious code.

I'd like to notify several people of this PR, since they might be interested and have useful insights:

1. @huonw because he wrote the [original merge sort](https://github.com/rust-lang/rust/pull/11064).
2. @alexcrichton because he was involved in multiple discussions of it.
3. @veddan because he wrote [introsort](https://github.com/veddan/rust-introsort) in Rust.
4. @notriddle because he wrote [TimSort](https://github.com/notriddle/rust-timsort) in Rust.
5. @bluss because he had an attempt at writing WikiSort in Rust.
6. @gnzlbg, @rkruppe, and @mark-i-m because they were involved in discussion #36318.

**P.S.** [quickersort](https://github.com/notriddle/quickersort) describes itself as being universally [faster](https://github.com/notriddle/quickersort/blob/master/perf.txt) than the standard sort, which is true. However, if this PR gets merged, things might [change](https://gist.github.com/stjepang/b9f0c3eaa0e1f1280b61b963dae19a30) a bit. ;)

7 years agoAuto merge of #38256 - alexcrichton:distcheck, r=brson
bors [Fri, 9 Dec 2016 07:08:29 +0000 (07:08 +0000)]
Auto merge of #38256 - alexcrichton:distcheck, r=brson

rustbuild: Implement distcheck

This commit implements the `distcheck` target for rustbuild which is only ever
run on our nightly bots. This essentially just creates a tarball, un-tars it,
and then runs a full build, validating that the release tarballs do indeed have
everything they need to build Rust.

7 years agoAuto merge of #37492 - japaric:no-atomics-alloc, r=brson
bors [Fri, 9 Dec 2016 04:02:51 +0000 (04:02 +0000)]
Auto merge of #37492 - japaric:no-atomics-alloc, r=brson

make `alloc` and `collections` compilable for thumbv6m-none-eabi

by cfging away `alloc::Arc` and changing OOM to abort for this target

r? @alexcrichton
cc @thejpster

7 years agorustbuild: Implement distcheck
Alex Crichton [Fri, 9 Dec 2016 01:13:55 +0000 (17:13 -0800)]
rustbuild: Implement distcheck

This commit implements the `distcheck` target for rustbuild which is only ever
run on our nightly bots. This essentially just creates a tarball, un-tars it,
and then runs a full build, validating that the release tarballs do indeed have
everything they need to build Rust.

7 years agoInline nested fn collapse
Stjepan Glavina [Thu, 8 Dec 2016 21:37:36 +0000 (22:37 +0100)]
Inline nested fn collapse

Since merge_sort is generic and collapse isn't, that means calls to
collapse won't be inlined.  inlined. Therefore, we must stick an
`#[inline]` above `fn collapse`.

7 years agoAuto merge of #38195 - rkruppe:llvm-pass-name-fwdcompat, r=alexcrichton
bors [Thu, 8 Dec 2016 21:13:52 +0000 (21:13 +0000)]
Auto merge of #38195 - rkruppe:llvm-pass-name-fwdcompat, r=alexcrichton

[LLVM 4.0] test/run-make/llvm-pass/

cc #37609

7 years agoAuto merge of #38182 - bluss:more-vec-extend, r=alexcrichton
bors [Thu, 8 Dec 2016 15:39:39 +0000 (15:39 +0000)]
Auto merge of #38182 - bluss:more-vec-extend, r=alexcrichton

Specialization for Extend<&T> for vec

Specialize to use copy_from_slice when extending a Vec with &[T] where
T: Copy.

This specialization results in `.clone()` not being called in `extend_from_slice` and `extend` when the element is `Copy`.

Fixes #38021

7 years agoAuto merge of #38156 - shepmaster:llvm-4.0-bitcode-reader-writer, r=alexcrichton
bors [Thu, 8 Dec 2016 11:45:26 +0000 (11:45 +0000)]
Auto merge of #38156 - shepmaster:llvm-4.0-bitcode-reader-writer, r=alexcrichton

[LLVM 4.0] New bitcode headers and API

/cc @michaelwoerister @rkruppe

7 years agoalso generate MIR for statics
Oliver Schneider [Thu, 8 Dec 2016 09:34:44 +0000 (10:34 +0100)]
also generate MIR for statics

7 years agoAuto merge of #38146 - kali:master, r=alexcrichton
bors [Thu, 8 Dec 2016 07:05:19 +0000 (07:05 +0000)]
Auto merge of #38146 - kali:master, r=alexcrichton

fix objc ABI in std::env::args

iOS use different calling convention for `objc_msgSend` depending on the platform. armv7 expect good old variadic arguments, but aarch64 wants "normal" convention: `objc_msgSend` has to be called mimicking the actual callee prototype.

https://developer.apple.com/library/content/documentation/General/Conceptual/CocoaTouch64BitGuide/ConvertingYourAppto64-Bit/ConvertingYourAppto64-Bit.html#//apple_ref/doc/uid/TP40013501-CH3-SW26

This currently breaks std::env:args() on aarch64 iOS devices. As far as I can tell, in the standard library, this is the only occurrence of ObjectiveC dispatching.

7 years agoAuto merge of #38076 - alexcrichton:another-rustbuild-bug, r=japaric
bors [Thu, 8 Dec 2016 03:03:51 +0000 (03:03 +0000)]
Auto merge of #38076 - alexcrichton:another-rustbuild-bug, r=japaric

rustbuild: Use src/rustc for assembled compilers

The `src/rustc` path is intended for assembling a compiler (e.g. the bare bones)
not actually compiling the whole compiler itself. This path was accidentally
getting hijacked to represent the whole compiler being compiled, so let's
redirect that elsewhere for that particular cargo project.

Closes #38039

7 years agoAuto merge of #38191 - oli-obk:clippy_is_sad, r=eddyb
bors [Wed, 7 Dec 2016 23:06:10 +0000 (23:06 +0000)]
Auto merge of #38191 - oli-obk:clippy_is_sad, r=eddyb

annotate stricter lifetimes on LateLintPass methods to allow them to forward to a Visitor

this unblocks clippy (rustup blocked after #37918)

clippy has lots of lints that internally call an `intravisit::Visitor`, but the current lifetimes on `LateLintPass` methods conflicted with the required lifetimes (there was no connection between the HIR elements and the `TyCtxt`)

r? @Manishearth

7 years agoImplement a faster sort algorithm
Stjepan Glavina [Tue, 6 Dec 2016 11:05:16 +0000 (12:05 +0100)]
Implement a faster sort algorithm

This is a complete rewrite of the standard sort algorithm. The new algorithm
is a simplified variant of TimSort. In summary, the changes are:

* Improved performance, especially on partially sorted inputs.
* Performs less comparisons on both random and partially sorted inputs.
* Decreased the size of temporary memory: the new sort allocates 4x less.

7 years agoAuto merge of #38214 - GuillaumeGomez:rollup, r=GuillaumeGomez
bors [Wed, 7 Dec 2016 19:46:23 +0000 (19:46 +0000)]
Auto merge of #38214 - GuillaumeGomez:rollup, r=GuillaumeGomez

Rollup of 9 pull requests

- Successful merges: #38085, #38123, #38151, #38153, #38158, #38163, #38186, #38189, #38208
- Failed merges:

7 years agoRollup merge of #38225 - Cobrand:patch-1, r=GuillaumeGomez
Guillaume Gomez [Wed, 7 Dec 2016 18:42:52 +0000 (10:42 -0800)]
Rollup merge of #38225 - Cobrand:patch-1, r=GuillaumeGomez

Update book/ffi to use catch_unwind

r? @GuillaumeGomez

The doc mentioned to spawn a new thread instead of using catch_unwind, which has been the recommended way to catch panics for foreign function interfaces for a few releases now.

This commit fixes that.

7 years agoRollup merge of #38189 - GuillaumeGomez:rc_links, r=frewsxcv
Guillaume Gomez [Wed, 7 Dec 2016 18:42:52 +0000 (10:42 -0800)]
Rollup merge of #38189 - GuillaumeGomez:rc_links, r=frewsxcv

Add missing links to Rc doc

r? @frewsxcv

7 years agoRollup merge of #38186 - frewsxcv:default, r=GuillaumeGomez
Guillaume Gomez [Wed, 7 Dec 2016 18:42:52 +0000 (10:42 -0800)]
Rollup merge of #38186 - frewsxcv:default, r=GuillaumeGomez

Add docs for last undocumented `Default` `impl`.

Add doc comment for `Default` `impl` on `DefaultHasher`.

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

7 years agoRollup merge of #38163 - durka:patch-33, r=bluss
Guillaume Gomez [Wed, 7 Dec 2016 18:42:52 +0000 (10:42 -0800)]
Rollup merge of #38163 - durka:patch-33, r=bluss

reference: fix definition of :tt

The reference says that $x:tt matches "either side of the `=>` in macro_rules` which is technically true but completely uninformative. This changes that bullet point to what the book says (a single token or sequence of token trees inside brackets).

7 years agoRollup merge of #38153 - GuillaumeGomez:typo, r=bluss
Guillaume Gomez [Wed, 7 Dec 2016 18:42:51 +0000 (10:42 -0800)]
Rollup merge of #38153 - GuillaumeGomez:typo, r=bluss

Fix small typo

7 years agoRollup merge of #38151 - GuillaumeGomez:exit-examples, r=frewsxcv
Guillaume Gomez [Wed, 7 Dec 2016 18:42:51 +0000 (10:42 -0800)]
Rollup merge of #38151 - GuillaumeGomez:exit-examples, r=frewsxcv

Add examples for exit function

r? @frewsxcv

7 years agoRollup merge of #38123 - GuillaumeGomez:panic_doc, r=frewsxcv
Guillaume Gomez [Wed, 7 Dec 2016 18:42:51 +0000 (10:42 -0800)]
Rollup merge of #38123 - GuillaumeGomez:panic_doc, r=frewsxcv

Add missing examples for panicking objects

r? @frewsxcv

7 years agoRollup merge of #38085 - estebank:empty-import-list-fix-38012, r=jseyfried
Guillaume Gomez [Wed, 7 Dec 2016 18:42:51 +0000 (10:42 -0800)]
Rollup merge of #38085 - estebank:empty-import-list-fix-38012, r=jseyfried

Warn when an import list is empty

For a given file

```rust
use std::*;
use std::{};
```

output the following warnings

```
warning: unused import: `use std::{};`, #[warn(unused_imports)] on by default
 --> file.rs:2:1
  |
2 | use std::{};
  | ^^^^^^^^^^^^

warning: unused import: `std::*;`, #[warn(unused_imports)] on by default
 --> file.rs:1:5
  |
1 | use std::*;
  |     ^^^^^^^
```

7 years agoUpdate book/ffi to use catch_unwind
Cobrand [Wed, 7 Dec 2016 17:43:07 +0000 (18:43 +0100)]
Update book/ffi to use catch_unwind

r? @GuillaumeGomez

The doc mentioned to spawn a new thread instead of using catch_unwind, which has been the recommended way to catch panics for foreign function interfaces for a few releases now.

7 years agoAuto merge of #38105 - ollie27:rustdoc_deterministic_js, r=GuillaumeGomez
bors [Wed, 7 Dec 2016 16:32:48 +0000 (16:32 +0000)]
Auto merge of #38105 - ollie27:rustdoc_deterministic_js, r=GuillaumeGomez

rustdoc: Sort lines in search index and implementors js

This means the files are generated deterministically even with rustdoc running in parallel.

Fixes the first part of #30220.

7 years agoprintf type correctness
Robin Kruppe [Wed, 7 Dec 2016 16:02:34 +0000 (17:02 +0100)]
printf type correctness

The %.*s format specifier requires an int for the maximum size, but StringRef::size is a size_t

cc @shepmaster

7 years agoremove useless lifetimes on LateLintPass impl methods
Oliver Schneider [Wed, 7 Dec 2016 12:56:36 +0000 (13:56 +0100)]
remove useless lifetimes on LateLintPass impl methods

7 years agoadd a -Z flag to guarantee that MIR is generated for all functions
Oliver Schneider [Wed, 7 Dec 2016 12:22:21 +0000 (13:22 +0100)]
add a -Z flag to guarantee that MIR is generated for all functions

7 years agoremove useless lifetime outlives bounds
Oliver Schneider [Wed, 7 Dec 2016 12:14:47 +0000 (13:14 +0100)]
remove useless lifetime outlives bounds

7 years agoAuto merge of #37817 - alexcrichton:rustbuild-default, r=brson
bors [Wed, 7 Dec 2016 12:09:11 +0000 (12:09 +0000)]
Auto merge of #37817 - alexcrichton:rustbuild-default, r=brson

mk: Switch rustbuild to the default build system

This commit switches the default build system for Rust from the makefiles to
rustbuild. The rustbuild build system has been in development for almost a year
now and has become quite mature over time. This commit is an implementation of
the proposal on [internals] which slates deletion of the makefiles on
2017-02-02.

[internals]: https://internals.rust-lang.org/t/proposal-for-promoting-rustbuild-to-official-status/4368

This commit also updates various documentation in `README.md`,
`CONTRIBUTING.md`, `src/bootstrap/README.md`, and throughout the source code of
rustbuild itself.

7 years agomk: Switch rustbuild to the default build system
Alex Crichton [Wed, 16 Nov 2016 20:31:19 +0000 (12:31 -0800)]
mk: Switch rustbuild to the default build system

This commit switches the default build system for Rust from the makefiles to
rustbuild. The rustbuild build system has been in development for almost a year
now and has become quite mature over time. This commit is an implementation of
the proposal on [internals] which slates deletion of the makefiles on
2016-01-02.

[internals]: https://internals.rust-lang.org/t/proposal-for-promoting-rustbuild-to-official-status/4368

This commit also updates various documentation in `README.md`,
`CONTRIBUTING.md`, `src/bootstrap/README.md`, and throughout the source code of
rustbuild itself.

Closes #37858

7 years agoAuto merge of #38149 - bluss:is-empty, r=alexcrichton
bors [Wed, 7 Dec 2016 07:15:31 +0000 (07:15 +0000)]
Auto merge of #38149 - bluss:is-empty, r=alexcrichton

Forward more ExactSizeIterator methods and `is_empty` edits

- Forward ExactSizeIterator methods in more places, like `&mut I` and `Box<I>` iterator impls.
- Improve `VecDeque::is_empty` itself (see commit 4)
- All the collections iterators now have `len` or `is_empty` forwarded if doing so is a benefit. In the remaining cases, they already use a simple size hint (using something like a stored `usize` value), which is sufficient for the default implementation of len and is_empty.

7 years agoAuto merge of #38144 - clarcharr:redundant, r=alexcrichton
bors [Wed, 7 Dec 2016 03:54:14 +0000 (03:54 +0000)]
Auto merge of #38144 - clarcharr:redundant, r=alexcrichton

Remove redundant assertion near is_char_boundary

Follow-up from #38056. `is_char_boundary` already checks for `idx <= len`, so, an extra assertion is redundant.

7 years agoAdd doc comment for `Default` `impl` on `DefaultHasher`.
Corey Farwell [Mon, 5 Dec 2016 23:34:19 +0000 (15:34 -0800)]
Add doc comment for `Default` `impl` on `DefaultHasher`.

7 years agoAuto merge of #38134 - bluss:iter-nth, r=aturon
bors [Wed, 7 Dec 2016 00:30:25 +0000 (00:30 +0000)]
Auto merge of #38134 - bluss:iter-nth, r=aturon

Remove Self: Sized from Iterator::nth

It is an unnecessary restriction; nth neither needs self to be sized
nor needs to be exempted from the trait object.

It increases the utility of the nth method, because type specific
implementations are available through `&mut I` or through an iterator
trait object.

It is a backwards compatible change due to the special cases of the
`where Self: Sized` bound; it was already optional to include this bound
in `Iterator` implementations.

7 years agosave-analysis: fix a few generated code errors
Nick Cameron [Tue, 6 Dec 2016 23:27:36 +0000 (13:27 -1000)]
save-analysis: fix a few generated code errors

7 years agoAuto merge of #38017 - arthurprs:hm-extend, r=bluss
bors [Tue, 6 Dec 2016 21:05:31 +0000 (21:05 +0000)]
Auto merge of #38017 - arthurprs:hm-extend, r=bluss

Smarter HashMap/HashSet pre-allocation for extend/from_iter

HashMap/HashSet from_iter and extend are making totally different assumptions.

A more balanced decision may allocate half the lower hint (rounding up). For "well defined" iterators this effectively limits the worst case to two resizes (the initial reserve + one resize).

cc #36579
cc @bluss

7 years agoFix current_exe() on DragonFly (again)
Michael Neumann [Tue, 6 Dec 2016 18:31:48 +0000 (19:31 +0100)]
Fix current_exe() on DragonFly (again)

This is a follow up on [this pull request][1].

Since DragonFly 4.6.1 ([this commit][2]), the "kern.proc.pathname"
sysctl works correctly, i.e. it does not return paths including a ":"
(see [here][3]). Use it and don't try to fix old versions of DragonFly!
There are not many DragonFly installations out there that we can't
control and no one is compiling Rust from source. If someone wants to
run Rust on a pre-4.6.1 DragonFly system, the ports system should
provide a patch.

[1]: https://github.com/rust-lang/rust/pull/35494
[2]: https://gitweb.dragonflybsd.org/dragonfly.git/commit/726f7ca07e193db73635e9c4e24e40c96087d6d9
[3]: https://gist.github.com/mneumann/a2f6b6a0a03935b561d6185872a4b222

7 years agoAuto merge of #38036 - Mark-Simulacrum:polish-2, r=nagisa,eddyb
bors [Tue, 6 Dec 2016 17:38:26 +0000 (17:38 +0000)]
Auto merge of #38036 - Mark-Simulacrum:polish-2, r=nagisa,eddyb

Simplify calling find_implied_output_region.

@nnethercote added the optimization that find_implied_output_region
takes a closure as an optimization in #37014, but passing an iterator is
simpler, and more ergonomic for callers.

7 years ago[LLVM 4.0] rustllvm archive support
Robin Kruppe [Tue, 6 Dec 2016 16:37:32 +0000 (17:37 +0100)]
[LLVM 4.0] rustllvm archive support

Error handling is being transitioned from ErrorOr<T> to Expected<T> which has a different API and requires explicitly handling all errors

7 years ago[LLVM 4.0] test/run-make/llvm-pass/
Robin Kruppe [Tue, 6 Dec 2016 16:23:04 +0000 (17:23 +0100)]
[LLVM 4.0] test/run-make/llvm-pass/

7 years agoAuto merge of #37994 - upsuper:msvc-link-opt, r=alexcrichton
bors [Tue, 6 Dec 2016 14:16:49 +0000 (14:16 +0000)]
Auto merge of #37994 - upsuper:msvc-link-opt, r=alexcrichton

Don't apply msvc link opts for non-opt build

`/OPT:REF,ICF` sometimes takes lots of time. It makes no sense to apply them when doing debug build. MSVC's linker by default disables these optimizations when `/DEBUG` is specified, unless they are explicitly passed.

7 years agoSimplify calling find_implied_output_region.
Mark-Simulacrum [Sun, 27 Nov 2016 16:52:44 +0000 (09:52 -0700)]
Simplify calling find_implied_output_region.

@nnethercote added the optimization that find_implied_output_region
takes a closure as an optimization in #37014, but passing an iterator is
simpler, and more ergonomic for callers.

7 years agoAuto merge of #37973 - vadimcn:dllimport, r=alexcrichton
bors [Tue, 6 Dec 2016 10:54:45 +0000 (10:54 +0000)]
Auto merge of #37973 - vadimcn:dllimport, r=alexcrichton

Implement RFC 1717

Implement the first two points from #37403.

r? @alexcrichton

7 years agoannotate stricter lifetimes on LateLintPass methods to allow them to forward to a...
Oliver Schneider [Tue, 6 Dec 2016 10:26:52 +0000 (11:26 +0100)]
annotate stricter lifetimes on LateLintPass methods to allow them to forward to a Visitor

7 years agoSmarter HashMap/HashSet extend
arthurprs [Sat, 26 Nov 2016 16:30:29 +0000 (17:30 +0100)]
Smarter HashMap/HashSet extend

7 years agoAuto merge of #38097 - Mark-Simulacrum:fn-sig-slice, r=eddyb
bors [Tue, 6 Dec 2016 07:35:21 +0000 (07:35 +0000)]
Auto merge of #38097 - Mark-Simulacrum:fn-sig-slice, r=eddyb

Refactor ty::FnSig to contain a &'tcx Slice<Ty<'tcx>>

We refactor this in order to achieve the following wins:

 - Decrease the size of `FnSig` (`Vec` + `bool`: 32, `&Slice` + `bool`: 24).
 - Potentially decrease total allocated memory due to arena-allocating `FnSig` inputs/output; since they are allocated in the type list arena, other users of type lists can reuse the same allocation for an equivalent type list.
 - Remove the last part of the type system which needs drop glue (#37965 removed the other remaining part). This makes arenas containing `FnSig` faster to drop (since we don't need to drop a Vec for each one), and makes reusing them without clearing/dropping potentially possible.

r? @eddyb

7 years agovec: More specialization for Extend<&T> for vec
Ulrik Sverdrup [Mon, 5 Dec 2016 20:48:53 +0000 (21:48 +0100)]
vec: More specialization for Extend<&T> for vec

Specialize to use copy_from_slice when extending a Vec with &[T] where
T: Copy.

7 years agoRefactor FnSig to contain a Slice for its inputs and outputs.
Mark-Simulacrum [Tue, 29 Nov 2016 03:25:33 +0000 (20:25 -0700)]
Refactor FnSig to contain a Slice for its inputs and outputs.

7 years agoRefactor ty::FnSig to privatize all fields
Mark-Simulacrum [Tue, 29 Nov 2016 02:35:38 +0000 (19:35 -0700)]
Refactor ty::FnSig to privatize all fields

7 years agoAuto merge of #38128 - cardoe:req-cmake-only-for-llvm, r=alexcrichton
bors [Tue, 6 Dec 2016 03:45:49 +0000 (03:45 +0000)]
Auto merge of #38128 - cardoe:req-cmake-only-for-llvm, r=alexcrichton

configure: only req CMake if we're building LLVM

CMake is only necessary if LLVM is going to be built and not in any
other case.

Signed-off-by: Doug Goldstein <cardoe@cardoe.com>
7 years agoAdd missing links to Rc doc
Guillaume Gomez [Tue, 6 Dec 2016 02:33:03 +0000 (18:33 -0800)]
Add missing links to Rc doc

7 years agoWarn when an import list is empty
Esteban Küber [Wed, 30 Nov 2016 08:07:31 +0000 (00:07 -0800)]
Warn when an import list is empty

For a given file

```rust
use std::*;
use std::{};
```

output the following warnings

```
warning: unused import: `use std::{};`, #[warn(unused_imports)] on by default
 --> file.rs:2:1
  |
2 | use std::{};
  | ^^^^^^^^^^^^

warning: unused import: `std::*;`, #[warn(unused_imports)] on by default
 --> file.rs:1:5
  |
1 | use std::*;
  |     ^^^^^^^
```

7 years agoConsider only libs that aren't excluded by #[link(cfg=...)]
Vadim Chugunov [Mon, 5 Dec 2016 18:15:14 +0000 (10:15 -0800)]
Consider only libs that aren't excluded by #[link(cfg=...)]

7 years agoAnnotate more tests with kind="static"
Vadim Chugunov [Tue, 6 Dec 2016 00:31:05 +0000 (16:31 -0800)]
Annotate more tests with kind="static"

7 years agoAuto merge of #38121 - jonathandturner:better_e0061, r=nikomatsakis
bors [Tue, 6 Dec 2016 00:17:24 +0000 (00:17 +0000)]
Auto merge of #38121 - jonathandturner:better_e0061, r=nikomatsakis

Point arg num mismatch errors back to their definition

This PR updates the arg num errors (like E0061) to point back at the function definition where they were defined.

Before:

```
error[E0061]: this function takes 2 parameters but 1 parameter was supplied
  --> E0061.rs:18:7
   |
18 |     f(0);
   |       ^
   |
   = note: the following parameter types were expected:
   = note: u16, &str
```

Now:

```
error[E0061]: this function takes 2 parameters but 1 parameter was supplied
  --> E0061.rs:18:7
   |
11 | fn f(a: u16, b: &str) {}
   | ------------------------ defined here
...
18 |     f(0);
   |       ^ expected 2 parameters
```

This is an incremental improvement.  We probably want to underline only the function name and also have support for functions defined in crates outside of the current crate.

r? @nikomatsakis

7 years agoAuto merge of #38117 - michaelwoerister:hidden-symbols, r=alexcrichton
bors [Mon, 5 Dec 2016 20:53:04 +0000 (20:53 +0000)]
Auto merge of #38117 - michaelwoerister:hidden-symbols, r=alexcrichton

Improve symbol visibility handling for dynamic libraries.

This will hopefully fix issue https://github.com/rust-lang/rust/issues/37530 and maybe also https://github.com/rust-lang/rust/issues/32887.

I'm relying on @m4b to post some numbers on how awesome the improvement for cdylibs is `:)`

cc @rust-lang/compiler @rust-lang/tools @cuviper @froydnj
r? @alexcrichton

7 years agoAuto merge of #38111 - japaric:jemalloc, r=alexcrichton
bors [Mon, 5 Dec 2016 17:37:40 +0000 (17:37 +0000)]
Auto merge of #38111 - japaric:jemalloc, r=alexcrichton

don't rebuild alloc_jemalloc if jemalloc's .git directory has changed

the .git directory is modified by `bootstrap` when it updates this git
submodule; this triggered rebuilds every time `bootstrap` was called.

likely fixes #38094

r? @alexcrichton

7 years agoMake symbol-visibility test case work on all platforms.
Michael Woerister [Fri, 2 Dec 2016 23:02:46 +0000 (18:02 -0500)]
Make symbol-visibility test case work on all platforms.

7 years agoMention cdylibs in LTO error message.
Michael Woerister [Fri, 2 Dec 2016 23:02:14 +0000 (18:02 -0500)]
Mention cdylibs in LTO error message.

7 years agoExport the plugin registrar from proc-macro crates (and not much else)
Michael Woerister [Fri, 2 Dec 2016 23:00:41 +0000 (18:00 -0500)]
Export the plugin registrar from proc-macro crates (and not much else)

7 years agoAdd test case for symbol visibility in dylibs.
Michael Woerister [Thu, 1 Dec 2016 20:06:33 +0000 (15:06 -0500)]
Add test case for symbol visibility in dylibs.

7 years agoLinking: Include export lists in debug output.
Michael Woerister [Thu, 1 Dec 2016 19:57:46 +0000 (14:57 -0500)]
Linking: Include export lists in debug output.

7 years agoGenerate a version script for linkers on Linux.
Michael Woerister [Wed, 30 Nov 2016 18:16:53 +0000 (13:16 -0500)]
Generate a version script for linkers on Linux.

7 years agoRefactor symbol export list generation.
Michael Woerister [Wed, 30 Nov 2016 15:03:42 +0000 (10:03 -0500)]
Refactor symbol export list generation.

7 years agotrans: Rename `reachable` to `exported_symbols` where appropriate.
Michael Woerister [Mon, 28 Nov 2016 23:05:53 +0000 (18:05 -0500)]
trans: Rename `reachable` to `exported_symbols` where appropriate.

7 years agoMake LLVM symbol visibility FFI types more stable.
Michael Woerister [Mon, 28 Nov 2016 22:44:51 +0000 (17:44 -0500)]
Make LLVM symbol visibility FFI types more stable.

7 years agoAuto merge of #38107 - keeperofdakeys:proc-macro-test, r=alexcrichton
bors [Mon, 5 Dec 2016 14:27:06 +0000 (14:27 +0000)]
Auto merge of #38107 - keeperofdakeys:proc-macro-test, r=alexcrichton

Allow --test to be used on proc-macro crates

Fixes #37480

This patch allows `--test` to work for proc-macro crates, removing the previous error.

7 years agoAuto merge of #38100 - nox:llvm, r=alexcrichton
bors [Mon, 5 Dec 2016 10:04:25 +0000 (10:04 +0000)]
Auto merge of #38100 - nox:llvm, r=alexcrichton

Update llvm fork to 3ec14daffb4b8c0604df50b7fb0ab552f456e381

7 years agoAuto merge of #38098 - luser:windows-commandext, r=alexcrichton
bors [Mon, 5 Dec 2016 06:53:56 +0000 (06:53 +0000)]
Auto merge of #38098 - luser:windows-commandext, r=alexcrichton

Add std::os::windows::process::CommandExt. Fixes #37827

This adds a CommandExt trait for Windows along with an implementation of it
for std::process::Command with methods to set the process creation flags that
are passed to CreateProcess.

7 years agoAdd missing examples for panicking objects
Guillaume Gomez [Fri, 2 Dec 2016 01:29:53 +0000 (17:29 -0800)]
Add missing examples for panicking objects

7 years agoAuto merge of #38093 - mikhail-m1:stack-overflow, r=arielb1
bors [Mon, 5 Dec 2016 02:48:03 +0000 (02:48 +0000)]
Auto merge of #38093 - mikhail-m1:stack-overflow, r=arielb1

fix stack overflow by enum and cont issue #36163

some paths were skipped while checking for recursion.

I fixed bug reproduces on win64 cargo test. In previous PR #36458 time complexity was exponential in case of linked const values. Now it's linear.

r? @alexcrichton

7 years agoAuto merge of #38092 - pnkfelix:mir-stats, r=nikomatsakis
bors [Sun, 4 Dec 2016 23:36:50 +0000 (23:36 +0000)]
Auto merge of #38092 - pnkfelix:mir-stats, r=nikomatsakis

Adds `-Z mir-stats`, which is similar to `-Z hir-stats`.

Adds `-Z mir-stats`, which is similar to `-Z hir-stats`.

Some notes:

* This code attempts to present the breakdown of each variant for
  every enum in the MIR. This is meant to guide decisions about how to
  revise representations e.g. when to box payloads for rare variants
  to shrink the size of the enum overall.

* I left out the "Total:" line that hir-stats presents, because this
  implementation uses the MIR Visitor infrastructure, and the memory
  usage of structures directly embedded in other structures (e.g. the
  `func: Operand` in a `TerminatorKind:Call`) is not distinguished
  from similar structures allocated in a `Vec` (e.g. the `args:
  Vec<Operand>` in a `TerminatorKind::Call`). This means that a naive
  summation of all the accumulated sizes is misleading, because it
  will double-count the contribution of the `Operand` of the `func` as
  well as the size of the whole `TerminatorKind`.

  * I did consider abandoning the MIR Visitor and instead hand-coding
    a traversal that distinguished embedded storage from indirect
    storage. But such code would be fragile; better to just require
    people to take care when interpreting the presented results.

* This traverses the `mir.promoted` rvalues to capture stats for MIR
  stored there, even though the MIR visitor super_mir method does not
  do so. (I did not observe any promoted mir being newly traversed when
  compiling the rustc crate, however.)

* It might be nice to try to unify this code with hir-stats.  Then
  again, the reporting portion is the only common code (I think), and
  it is small compared to the visitors in hir-stats and mir-stats.

7 years agoreference: fix definition of :tt
Alex Burka [Sun, 4 Dec 2016 20:56:51 +0000 (15:56 -0500)]
reference: fix definition of :tt

The reference says that $x:tt matches "either side of the `=>` in macro_rules` which is technically true but completely uninformative. This changes that bullet point to what the book says (a single token or sequence of token trees inside brackets).

7 years agoAuto merge of #38087 - jooert:remove_unmarked, r=petrochenkov
bors [Sun, 4 Dec 2016 19:47:18 +0000 (19:47 +0000)]
Auto merge of #38087 - jooert:remove_unmarked, r=petrochenkov

Remove the `unmarked_api` feature

Closes #37981.

7 years agoAuto merge of #38086 - semarie:openbsd-i686, r=alexcrichton
bors [Sun, 4 Dec 2016 16:35:09 +0000 (16:35 +0000)]
Auto merge of #38086 - semarie:openbsd-i686, r=alexcrichton

Add i686-unknown-openbsd target.

It is a preliminary work. I still have some tests failing, but I have a working rustc binary which is able to rebuild itself.

an update of libc should be required too, but I dunno how to do it with vendor/ layout.

r? @alexcrichton

7 years ago[LLVM 4.0] New bitcode headers and API
Jake Goulding [Thu, 17 Nov 2016 14:10:19 +0000 (09:10 -0500)]
[LLVM 4.0] New bitcode headers and API

7 years agoalloc: Forward ExactSizeIterator methods in Iterator for Box<I>
Ulrik Sverdrup [Sat, 3 Dec 2016 20:42:03 +0000 (21:42 +0100)]
alloc: Forward ExactSizeIterator methods in Iterator for Box<I>

7 years agoiter: Forward ExactSizeIterator methods for &mut I
Ulrik Sverdrup [Sat, 3 Dec 2016 21:47:33 +0000 (22:47 +0100)]
iter: Forward ExactSizeIterator methods for &mut I

7 years agobinary_heap: Forward ExactSizeIterator::is_empty
Ulrik Sverdrup [Sat, 3 Dec 2016 21:44:57 +0000 (22:44 +0100)]
binary_heap: Forward ExactSizeIterator::is_empty

7 years agocollections: Simplify VecDeque::is_empty
Ulrik Sverdrup [Sat, 3 Dec 2016 21:11:06 +0000 (22:11 +0100)]
collections: Simplify VecDeque::is_empty

Improve is_empty on the VecDeque and its iterators by just comparing
tail and head; this saves a few instructions (to be able to remove the
`& (size - 1)` computation, it would have to know that size is a power of two).

7 years agostd: Forward ExactSizeIterator::is_empty for Args, ArgsOs iterators
Ulrik Sverdrup [Sat, 3 Dec 2016 20:59:00 +0000 (21:59 +0100)]
std: Forward ExactSizeIterator::is_empty for Args, ArgsOs iterators

7 years agocore: Forward ExactSizeIterator::is_empty for Bytes
Ulrik Sverdrup [Sat, 3 Dec 2016 20:43:51 +0000 (21:43 +0100)]
core: Forward ExactSizeIterator::is_empty for Bytes

7 years agoDisable ICF opt of MSVC for non-opt build
Xidorn Quan [Fri, 25 Nov 2016 08:17:21 +0000 (19:17 +1100)]
Disable ICF opt of MSVC for non-opt build

7 years agoAuto merge of #38082 - jseyfried:macro_invocation_paths, r=nrc
bors [Sun, 4 Dec 2016 12:51:38 +0000 (12:51 +0000)]
Auto merge of #38082 - jseyfried:macro_invocation_paths, r=nrc

macros: support invocation paths (e.g. `foo::bar!()`) behind `#![feature(use_extern_macros)]`

r? @nrc

7 years agoFix small typo
Guillaume Gomez [Sun, 4 Dec 2016 08:48:11 +0000 (00:48 -0800)]
Fix small typo

7 years agoAuto merge of #37920 - nikomatsakis:compile-time-regression-37864, r=mw
bors [Sun, 4 Dec 2016 06:38:38 +0000 (06:38 +0000)]
Auto merge of #37920 - nikomatsakis:compile-time-regression-37864, r=mw

in region, treat current (and future) item-likes alike

The `visit_fn` code mutates its surrounding context.  Between *items*,
this was saved/restored, but between impl items it was not. This meant
that we wound up with `CallSiteScope` entries with two parents (or
more!).  As far as I can tell, this is harmless in actual type-checking,
since the regions you interact with are always from at most one of those
branches. But it can slow things down.

Before, the effect was limited, since it only applied to impl items
within an impl. After #37660, impl items are visisted all together at
the end, and hence this could create a very messed up
hierarchy. Isolating impl item properly solves both issues.

I cannot come up with a way to unit-test this; for posterity, however,
you can observe the messed up hierarchies with a test as simple as the
following, which would create a callsite scope with two parents both
before and after

```
struct Foo {
}

impl Foo {
    fn bar(&self) -> usize {
        22
    }

    fn baz(&self) -> usize {
        22
    }
}

fn main() { }
```

Fixes #37864.

r? @michaelwoerister

cc @pnkfelix -- can you think of a way to make a regr test?

7 years agoOpenBSD under x86 has particular ABI for returning a struct.
Sébastien Marie [Sat, 3 Dec 2016 17:58:21 +0000 (18:58 +0100)]
OpenBSD under x86 has particular ABI for returning a struct.

It is like OSX or Windows: small structs are returned as integers.

7 years agoAuto merge of #37857 - shepmaster:llvm-4.0-dinodes, r=michaelwoerister
bors [Sun, 4 Dec 2016 02:30:23 +0000 (02:30 +0000)]
Auto merge of #37857 - shepmaster:llvm-4.0-dinodes, r=michaelwoerister

[LLVM 4.0] Handle new DIFlags enum

7 years agoAdd examples for exit function
Guillaume Gomez [Sat, 3 Dec 2016 23:46:28 +0000 (15:46 -0800)]
Add examples for exit function

7 years agoIgnore test on -windows-gnu.
Vadim Chugunov [Sat, 3 Dec 2016 23:01:09 +0000 (15:01 -0800)]
Ignore test on -windows-gnu.