]> git.lizzy.rs Git - rust.git/log
rust.git
7 years agoAuto merge of #38049 - frewsxcv:libunicode, r=alexcrichton
bors [Mon, 12 Dec 2016 13:19:33 +0000 (13:19 +0000)]
Auto merge of #38049 - frewsxcv:libunicode, r=alexcrichton

Rename 'librustc_unicode' crate to 'libstd_unicode'.

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

7 years agoAuto merge of #38307 - bluss:mir-opt-level, r=eddyb
bors [Mon, 12 Dec 2016 10:19:14 +0000 (10:19 +0000)]
Auto merge of #38307 - bluss:mir-opt-level, r=eddyb

Simplify use of mir_opt_level

Remove the unused top level option by the same name, and retain the
debug option.

Use -Zmir-opt-level=1 as default.

One pass is enabled by default but wants to be optional:

- Instcombine requires mir_opt_level > 0

Copy propagation is not used by default, but used to be activated by
explicit -Zmir-opt-level=1. It must move one higher to be off by
default:

- CopyPropagation requires mir_opt_level > 1

Deaggregate is not used by default, and used to be on a different level
than CopyPropagation:

- Deaggreate requires mir_opt_level > 2

7 years agoAuto merge of #38296 - dylanmckay:llvm-4.0-errortype, r=alexcrichton
bors [Mon, 12 Dec 2016 07:19:35 +0000 (07:19 +0000)]
Auto merge of #38296 - dylanmckay:llvm-4.0-errortype, r=alexcrichton

[LLVM 4.0] Explicitly call constructor of 'llvm::Error'

The implicit constructor has been deleted. We should use
Error::success() instead.

The constructor in the LLVM headers mentions that "success" should be
used instead of the deleted constructor for clarity.

7 years agoAuto merge of #38291 - brson:licenseck, r=alexcrichton
bors [Mon, 12 Dec 2016 03:40:15 +0000 (03:40 +0000)]
Auto merge of #38291 - brson:licenseck, r=alexcrichton

Check the license of vendored deps

r? @alexcrichton

7 years agoAuto merge of #38057 - KiChjang:display-formal-type-param, r=nikomatsakis
bors [Mon, 12 Dec 2016 00:22:30 +0000 (00:22 +0000)]
Auto merge of #38057 - KiChjang:display-formal-type-param, r=nikomatsakis

Display better error messages for E0282

Fixes #36554.

7 years agoAuto merge of #38265 - bluss:mir-deaggregator-loop, r=nagisa
bors [Sun, 11 Dec 2016 21:19:34 +0000 (21:19 +0000)]
Auto merge of #38265 - bluss:mir-deaggregator-loop, r=nagisa

Reinstate while loop in deaggregator pass

A previous commit must have removed the `while let` loop here by
mistake; for each basic block, it should find and deaggregate multiple
statements in their index order, and the `curr` index tracks the
progress through the block.

This fixes both the case of deaggregating statements in separate
basic blocks (preserving `curr` could prevent that) as well
as multiple times in the same block (missing loop prevented that).

The loop was lost in commit bda46c21fe30377b9587b584c64ffe99da6c14ce.

7 years agoSimplify use of mir_opt_level
Ulrik Sverdrup [Sun, 11 Dec 2016 20:16:01 +0000 (21:16 +0100)]
Simplify use of mir_opt_level

Remove the unused top level option by the same name, and retain the
debug option.

Use -Zmir-opt-level=1 as default.

One pass is enabled by default but wants to be optional:

- Instcombine requires mir_opt_level > 0

Copy propagation is not used by default, but used to be activated by
explicit -Zmir-opt-level=1. It must move one higher to be off by
default:

- CopyPropagation requires mir_opt_level > 1

Deaggregate is not used by default, and used to be on a different level
than CopyPropagation:

- Deaggreate requires mir_opt_level > 2

7 years agoAuto merge of #38272 - michaelwoerister:incr-symbol-visibility, r=nikomatsakis
bors [Sun, 11 Dec 2016 18:20:52 +0000 (18:20 +0000)]
Auto merge of #38272 - michaelwoerister:incr-symbol-visibility, r=nikomatsakis

incr.comp.: Take symbol visibility into account for CGU hashes

r? @nikomatsakis

7 years agoAuto merge of #38252 - pnkfelix:mildly-robustify-configure-msg, r=alexcrichton
bors [Sun, 11 Dec 2016 12:33:12 +0000 (12:33 +0000)]
Auto merge of #38252 - pnkfelix:mildly-robustify-configure-msg, r=alexcrichton

Make configure message re x.py not assume build dir == src dir

Fix #38251 but perhaps not BEST fix for it.

As driveby, fix copyright year in `Makefile.in`

7 years ago[LLVM 4.0] Explicitly call constructor of 'llvm::Error'
Dylan McKay [Sun, 11 Dec 2016 09:42:32 +0000 (22:42 +1300)]
[LLVM 4.0] Explicitly call constructor of 'llvm::Error'

The implicit constructor has been deleted. We should use
Error::success() instead.

The constructor in the LLVM headers mentions that "success" should be
used instead of the deleted constructor for clarity.

7 years agoAuto merge of #38249 - arielb1:special-substs, r=nikomatsakis
bors [Sun, 11 Dec 2016 09:33:05 +0000 (09:33 +0000)]
Auto merge of #38249 - arielb1:special-substs, r=nikomatsakis

erase lifetimes when translating specialized substs

Projections can generate lifetime variables with equality constraints,
that will not be resolved by `resolve_type_vars_if_possible`, so substs
need to be lifetime-erased after that.

Fixes #36848.

7 years agoAuto merge of #38250 - michaelwoerister:trait-methods-in-reachable, r=alexcrichton
bors [Sun, 11 Dec 2016 06:37:19 +0000 (06:37 +0000)]
Auto merge of #38250 - michaelwoerister:trait-methods-in-reachable, r=alexcrichton

Consider provided trait methods in middle::reachable

Fixes https://github.com/rust-lang/rust/issues/38226 by also considering trait methods with default implementation instead of just methods provided in an impl.

r? @alexcrichton
cc @panicbit

7 years agoAuto merge of #38240 - pftbest:update_llvm, r=japaric
bors [Sun, 11 Dec 2016 01:06:20 +0000 (01:06 +0000)]
Auto merge of #38240 - pftbest:update_llvm, r=japaric

LLVM: Update submodule to include patches for MSP430.

Fixes #37829

7 years agoCheck the license of vendored deps
Brian Anderson [Sat, 10 Dec 2016 23:27:42 +0000 (23:27 +0000)]
Check the license of vendored deps

7 years agoAuto merge of #38231 - vadimcn:errormode, r=alexcrichton
bors [Sat, 10 Dec 2016 22:08:20 +0000 (22:08 +0000)]
Auto merge of #38231 - vadimcn:errormode, r=alexcrichton

Prevent Windows from displaying UI on errors.

Otherwise tests like run-pass/out-of-stack get wedged on Windows error reporting dialog (unless error reporting has been disabled, of course).

7 years agoAuto merge of #38239 - jseyfried:fix_doc_tests_on_macros, r=eddyb
bors [Sat, 10 Dec 2016 19:12:54 +0000 (19:12 +0000)]
Auto merge of #38239 - jseyfried:fix_doc_tests_on_macros, r=eddyb

Fix doc-tests on exported `macro_rules!`

Fixes #38219.
r? @eddyb

7 years agoAuto merge of #37780 - GuillaumeGomez:E0571, r=nikomatsakis
bors [Sat, 10 Dec 2016 16:18:07 +0000 (16:18 +0000)]
Auto merge of #37780 - GuillaumeGomez:E0571, r=nikomatsakis

Add checkup for return statement outside of a function

Fixes #37778.

r? @eddyb (don't know who is in charge. Don't hesitate to set another one)

cc @jonathandturner

7 years agoAuto merge of #38233 - alexcrichton:more-errors, r=japaric
bors [Sat, 10 Dec 2016 13:00:25 +0000 (13:00 +0000)]
Auto merge of #38233 - alexcrichton:more-errors, r=japaric

rustbuild: Print out failing commands

Just ensure that we always print out the command line which should aid in
debugging.

Closes #38228

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 agoAdd UI test for missing type parameter
Keith Yeung [Fri, 9 Dec 2016 21:28:16 +0000 (13:28 -0800)]
Add UI test for missing type parameter

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 agoincr.comp.: Add test case for symbol visibility changes
Michael Woerister [Fri, 9 Dec 2016 22:46:31 +0000 (17:46 -0500)]
incr.comp.: Add test case for symbol visibility changes

7 years agoincr.comp.: Take symbol visibility into account for CGU hashes.
Michael Woerister [Fri, 9 Dec 2016 22:13:13 +0000 (17:13 -0500)]
incr.comp.: Take symbol visibility into account for CGU hashes.

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 agomir: Reinstate while loop in deaggregator pass
Ulrik Sverdrup [Fri, 9 Dec 2016 15:28:54 +0000 (16:28 +0100)]
mir: Reinstate while loop in deaggregator pass

A previous commit must have removed the `while let` loop here by
mistake; for each basic block, it should find and deaggregate multiple
statements in their index order, and the `curr` index tracks the
progress through the block.

This fixes both the case of deaggregating statements in separate
basic blocks (preserving `curr` could prevent that) as well
as multiple times in the same block (missing loop prevented that).

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 agoChange error to E0572
Guillaume Gomez [Fri, 9 Dec 2016 04:49:26 +0000 (20:49 -0800)]
Change error to E0572

7 years agoUpdate to last master
Guillaume Gomez [Tue, 6 Dec 2016 23:32:30 +0000 (15:32 -0800)]
Update to last master

7 years agoSet back Ty parameter to FnCntxt
Guillaume Gomez [Thu, 17 Nov 2016 21:47:30 +0000 (22:47 +0100)]
Set back Ty parameter to FnCntxt

7 years agoAdd E0571 test
Guillaume Gomez [Tue, 15 Nov 2016 15:11:06 +0000 (16:11 +0100)]
Add E0571 test

7 years agoAdd checkup for return statement outside of a function
Guillaume Gomez [Tue, 15 Nov 2016 15:09:39 +0000 (16:09 +0100)]
Add checkup for return statement outside of a function

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 agoFix #38251 but perhaps not BEST fix for it.
Felix S. Klock II [Thu, 8 Dec 2016 23:09:20 +0000 (13:09 -1000)]
Fix #38251 but perhaps not BEST fix for it.

7 years agoImprove debug output in trans::back::symbol_export.
Michael Woerister [Thu, 8 Dec 2016 21:57:34 +0000 (16:57 -0500)]
Improve debug output in trans::back::symbol_export.

7 years agoExtend middle::reachable to also consider provided trait methods.
Michael Woerister [Thu, 8 Dec 2016 21:55:51 +0000 (16:55 -0500)]
Extend middle::reachable to also consider provided trait methods.

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 agoLLVM: update trigger
Vadzim Dambrouski [Thu, 8 Dec 2016 13:45:18 +0000 (16:45 +0300)]
LLVM: update trigger

7 years agoLLVM: Update submodule to include patches for MSP430.
Vadzim Dambrouski [Thu, 8 Dec 2016 13:41:40 +0000 (16:41 +0300)]
LLVM: Update submodule to include patches for MSP430.

Fixes #37829

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 agoFix doc-tests on exported `macro_rules!`.
Jeffrey Seyfried [Thu, 8 Dec 2016 10:48:07 +0000 (10:48 +0000)]
Fix doc-tests on exported `macro_rules!`.

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 agoPreserve inherited mode flags.
Vadim Chugunov [Thu, 8 Dec 2016 02:05:20 +0000 (18:05 -0800)]
Preserve inherited mode flags.

7 years agoPrevent Windows from displaying UI on errors.
Vadim Chugunov [Wed, 7 Dec 2016 23:50:48 +0000 (15:50 -0800)]
Prevent Windows from displaying UI on errors.

7 years agorustbuild: Print out failing commands
Alex Crichton [Thu, 8 Dec 2016 01:26:48 +0000 (17:26 -0800)]
rustbuild: Print out failing commands

Just ensure that we always print out the command line which should aid in
debugging.

Closes #38228

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"