]> git.lizzy.rs Git - rust.git/log
rust.git
6 years agoAppease tidy and fix save-analysis config for dist builds
Nick Cameron [Wed, 2 Aug 2017 22:20:01 +0000 (10:20 +1200)]
Appease tidy and fix save-analysis config for dist builds

6 years agoUpdate RLS
Nick Cameron [Wed, 2 Aug 2017 05:21:12 +0000 (17:21 +1200)]
Update RLS

6 years agoUpdate rls-data dep
Nick Cameron [Wed, 2 Aug 2017 04:57:50 +0000 (16:57 +1200)]
Update rls-data dep

6 years agosave-analysis: only emit public fields in value of a struct if the config permits
Nick Cameron [Wed, 2 Aug 2017 03:46:59 +0000 (15:46 +1200)]
save-analysis: only emit public fields in value of a struct if the config permits

6 years agoAuto merge of #43576 - arielb1:no-unneeded-unwind, r=eddyb
bors [Tue, 1 Aug 2017 22:43:15 +0000 (22:43 +0000)]
Auto merge of #43576 - arielb1:no-unneeded-unwind, r=eddyb

rustc_mir: don't build unused unwind cleanup blocks

When building a scope exit, don't build unwind cleanup blocks unless they will actually be used by the unwind path of a drop - the unused blocks are removed by SimplifyCfg, but they can cause a significant performance slowdown before they are removed. That fixes #43511.

Also a few other small MIR cleanups & optimizations.

r? @eddyb

6 years agoAuto merge of #43529 - QuietMisdreavus:fn-docs, r=steveklabnik
bors [Tue, 1 Aug 2017 19:59:53 +0000 (19:59 +0000)]
Auto merge of #43529 - QuietMisdreavus:fn-docs, r=steveklabnik

add documentation for function pointers as a primitive

This PR adds a new kind of primitive to the standard library documentation: Function pointers. It's useful to be able to discuss them separately from closure-trait-objects, and to have something to point to when discussing function pointers as a *type* and not a *trait*.

Fixes #17104

6 years agoAuto merge of #43506 - michaelwoerister:async-llvm, r=alexcrichton
bors [Tue, 1 Aug 2017 17:21:24 +0000 (17:21 +0000)]
Auto merge of #43506 - michaelwoerister:async-llvm, r=alexcrichton

Run translation and LLVM in parallel when compiling with multiple CGUs

This is still a work in progress but the bulk of the implementation is done, so I thought it would be good to get it in front of more eyes.

This PR makes the compiler start running LLVM while translation is still in progress, effectively allowing for more parallelism towards the end of the compilation pipeline. It also allows the main thread to switch between either translation or running LLVM, which allows to reduce peak memory usage since not all LLVM module have to be kept in memory until linking. This is especially good for incr. comp. but it works just as well when running with `-Ccodegen-units=N`.

In order to help tuning and debugging the work scheduler, the PR adds the `-Ztrans-time-graph` flag which spits out html files that show how work packages where scheduled:
![Building regex](https://user-images.githubusercontent.com/1825894/28679272-f6752bd8-72f2-11e7-8a6c-56207855ce95.png)
(red is translation, green is llvm)

One side effect here is that `-Ztime-passes` might show something not quite correct because trans and LLVM are not strictly separated anymore. I plan to have some special handling there that will try to produce useful output.

One open question is how to determine whether the trans-thread should switch to intermediate LLVM processing.

TODO:
- [x] Restore `-Z time-passes` output for LLVM.
- [x] Update documentation, esp. for work package scheduling.
- [x] Tune the scheduling algorithm.

cc @alexcrichton @rust-lang/compiler

6 years agoadd documentation for function pointers as a primitive
QuietMisdreavus [Fri, 28 Jul 2017 17:55:30 +0000 (12:55 -0500)]
add documentation for function pointers as a primitive

6 years agoAuto merge of #43568 - arielb1:constant-recovery, r=eddyb
bors [Tue, 1 Aug 2017 14:20:23 +0000 (14:20 +0000)]
Auto merge of #43568 - arielb1:constant-recovery, r=eddyb

trans::mir::constant - fix assignment error recovery

trans::mir::constant - fix assignment error recovery

We used to not store anything when the RHS of an assignment returned an error, which caused ICEs downstream.

Fixes #43197.

6 years agoasync-llvm(29): Adapt run-make/llvm-phase test case to LLVM module not being availabl...
Michael Woerister [Tue, 1 Aug 2017 13:57:38 +0000 (15:57 +0200)]
async-llvm(29): Adapt run-make/llvm-phase test case to LLVM module not being available in memory.

6 years agoasync-llvm(28): Make some error messages more informative.
Michael Woerister [Tue, 1 Aug 2017 09:04:24 +0000 (11:04 +0200)]
async-llvm(28): Make some error messages more informative.

6 years agopacify the merciless tidy
Ariel Ben-Yehuda [Tue, 1 Aug 2017 08:57:26 +0000 (11:57 +0300)]
pacify the merciless tidy

6 years agoAuto merge of #43560 - QuietMisdreavus:ref-docs, r=steveklabnik
bors [Tue, 1 Aug 2017 08:23:41 +0000 (08:23 +0000)]
Auto merge of #43560 - QuietMisdreavus:ref-docs, r=steveklabnik

add docs for references as a primitive

Just like #43529 did for function pointers, here is a new primitive page for references.

This PR will pull in impls on references if it's a reference to a generic type parameter. Initially i was only able to pull in impls that were re-exported from another crate; crate-local impls got a different representation in the AST, and i had to change how types were resolved when cleaning it. (This is the change at the bottom of `librustdoc/clean/mod.rs`, in `resolve_type`.) I'm unsure the full ramifications of the change, but from what it looks like, it shouldn't impact anything major. Likewise, references to generic type parameters also get the `&'a [mut]` linked to the new page.

cc @rust-lang/docs: Is this sufficient information? The listing of trait impls kinda feels redundant (especially if we can get the automated impl listing sorted again), but i still think it's useful to point out that you can use these in a generic context.

Fixes #15654

6 years agoAuto merge of #43552 - petrochenkov:instab, r=jseyfried
bors [Tue, 1 Aug 2017 06:05:34 +0000 (06:05 +0000)]
Auto merge of #43552 - petrochenkov:instab, r=jseyfried

resolve: Try to fix instability in import suggestions

cc https://github.com/rust-lang/rust/pull/42033

`lookup_import_candidates` walks module graph in DFS order and skips modules that were already visited (which is correct because there can be cycles).
However it means that if we visited `std::prelude::v1::Result::Ok` first, we will never visit `std::result::Result::Ok` because `Result` will be skipped as already visited (note: enums are also modules here), and otherwise, if we visited `std::result::Result::Ok` first, we will never get to `std::prelude::v1::Result::Ok`.
What child module of `std` (`prelude` or `result`) we will visit first, depends on randomized hashing, so we have instability in diagnostics.

With this patch modules' children are visited in stable order in `lookup_import_candidates`, this should fix the issue, but let's see what Travis will say.

r? @oli-obk

6 years agoAuto merge of #43533 - nrc:macro-save, r=jseyfried,
bors [Tue, 1 Aug 2017 03:52:14 +0000 (03:52 +0000)]
Auto merge of #43533 - nrc:macro-save, r=jseyfried,

Three small fixes for save-analysis

First commit does some naive deduplication of macro uses. We end up with lots of duplication here because of the weird way we get this data (we extract a use for every span generated by a macro use).

Second commit is basically a typo fix.

Third commit is a bit interesting, it partially reverts a change from #40939 where temporary variables in format! (and thus println!) got a span with the primary pointing at the value stored into the temporary (e.g., `x` in `println!("...", x)`). If `format!` had a definition it should point at the temporary in the macro def, but since it is built-in, that is not possible (for now), so `DUMMY_SP` is the best we can do (using the span in the callee really breaks save-analysis because it thinks `x` is a definition as well as a reference).

There aren't a test for this stuff because: the deduplication is filtered by any of the users of save-analysis, so it is purely an efficiency change. I couldn't actually find an example for the second commit that we have any machinery to test, and the third commit is tested by the RLS, so there will be a test once I update the RLS version and and uncomment the previously failing tests).

r? @jseyfried

6 years agoreview changes
Nick Cameron [Tue, 1 Aug 2017 02:43:11 +0000 (14:43 +1200)]
review changes

6 years agoAuto merge of #43547 - arielb1:no-borrow-no-check, r=nikomatsakis
bors [Mon, 31 Jul 2017 23:21:24 +0000 (23:21 +0000)]
Auto merge of #43547 - arielb1:no-borrow-no-check, r=nikomatsakis

borrowck: skip CFG construction when there is nothing to propagate

CFG construction takes a large amount of time and memory, especially for
large constants. If such a constant contains no actions on lvalues, it
can't have borrowck problems and can be ignored by it.

This removes the 4.9GB borrowck peak from #36799. It seems that HIR had
grown by 300MB and MIR had grown by 500MB from the last massif
collection and that remains to be investigated, but this at least shaves
the borrowck peak.

r? @nikomatsakis

6 years agorustc_mir::transform::simplify - remove nops first
Ariel Ben-Yehuda [Mon, 31 Jul 2017 21:10:46 +0000 (00:10 +0300)]
rustc_mir::transform::simplify - remove nops first

Removing nops can allow more basic blocks to be merged, but merging
basic blocks can't allow for more nops to be removed, so we should
remove nops first.

This doesn't matter *that* much, because normally we run SimplifyCfg
several times, but there's no reason not to do it.

6 years agouse an iterator when visiting MIR basic blocks
Ariel Ben-Yehuda [Mon, 31 Jul 2017 21:09:32 +0000 (00:09 +0300)]
use an iterator when visiting MIR basic blocks

I saw MIR cache invalidation somewhat hot on my profiler when per-BB
indexin was used. That shouldn't matter much, but there is no good
reason not to use an iterator.

6 years agorustc_mir: don't build unused unwind cleanup blocks
Ariel Ben-Yehuda [Mon, 31 Jul 2017 20:25:27 +0000 (23:25 +0300)]
rustc_mir: don't build unused unwind cleanup blocks

The unused blocks are removed by SimplifyCfg, but they can cause a
significant performance slowdown before they are removed.

6 years agoremove the span field from `diverge_cleanup`
Ariel Ben-Yehuda [Mon, 31 Jul 2017 13:00:12 +0000 (16:00 +0300)]
remove the span field from `diverge_cleanup`

6 years agoAuto merge of #43399 - tschottdorf:bndmode-pat-adjustments, r=nikomatsakis
bors [Mon, 31 Jul 2017 20:47:42 +0000 (20:47 +0000)]
Auto merge of #43399 - tschottdorf:bndmode-pat-adjustments, r=nikomatsakis

default binding modes: add pat_binding_modes

This PR kicks off the implementation of the [default binding modes RFC][1] by
introducing the `pat_binding_modes` typeck table mentioned in the [mentoring
instructions][2].

It is a WIP because I wasn't able to avoid all uses of the binding modes as
not all call sites are close enough to the typeck tables. I added marker
comments to any line matching `BindByRef|BindByValue` so that reviewers
are aware of all of them.

I will look into changing the HIR (as suggested in [2]) to not carry a
`BindingMode` unless one was explicitly specified, but this PR is good for
a first round of comments.

The actual changes are quite small and CI will fail due to overlong lines
caused by the marker comments.

See #42640.

cc @nikomatsakis

[1]: https://github.com/rust-lang/rfcs/pull/2005
[2]: https://github.com/rust-lang/rust/issues/42640#issuecomment-313535089

6 years agoasync-llvm(27): Move #[rustc_error] check to an earlier point in order to restore...
Michael Woerister [Mon, 31 Jul 2017 16:51:39 +0000 (18:51 +0200)]
async-llvm(27): Move #[rustc_error] check to an earlier point in order to restore some test expections.

6 years agoadd comments from arielb1
Niko Matsakis [Mon, 31 Jul 2017 15:13:49 +0000 (18:13 +0300)]
add comments from arielb1

6 years agotrans::mir::constant - fix assignment error recovery
Ariel Ben-Yehuda [Mon, 31 Jul 2017 14:42:42 +0000 (17:42 +0300)]
trans::mir::constant - fix assignment error recovery

We used to not store anything when the RHS of an assignment returned an
error, which caused ICEs downstream.

Fixes #43197.

6 years agofix `-Z treat-err-as-bug`
Ariel Ben-Yehuda [Mon, 31 Jul 2017 12:54:16 +0000 (15:54 +0300)]
fix `-Z treat-err-as-bug`

6 years agoasync-llvm(26): Print error when failing to acquire Jobserver token.
Michael Woerister [Mon, 31 Jul 2017 13:41:41 +0000 (15:41 +0200)]
async-llvm(26): Print error when failing to acquire Jobserver token.

6 years agoasync-llvm(25): Restore -Ztime-passes output for trans and LLVM.
Michael Woerister [Mon, 31 Jul 2017 12:51:47 +0000 (14:51 +0200)]
async-llvm(25): Restore -Ztime-passes output for trans and LLVM.

6 years agoasync-llvm(24): Improve scheduling and documentation.
Michael Woerister [Fri, 28 Jul 2017 12:28:08 +0000 (14:28 +0200)]
async-llvm(24): Improve scheduling and documentation.

6 years agoasync-llvm(23): Let the main thread also do LLVM work in order to reduce memory pressure.
Michael Woerister [Thu, 27 Jul 2017 14:59:30 +0000 (16:59 +0200)]
async-llvm(23): Let the main thread also do LLVM work in order to reduce memory pressure.

6 years agoasync-llvm(22): mw invokes mad html skillz to produce graphical LLVM timing reports.
Michael Woerister [Thu, 27 Jul 2017 11:02:31 +0000 (13:02 +0200)]
async-llvm(22): mw invokes mad html skillz to produce graphical LLVM timing reports.

6 years agoasync-llvm(21): Re-use worker-ids in order to simulate persistent worker threads.
Michael Woerister [Thu, 27 Jul 2017 09:51:27 +0000 (11:51 +0200)]
async-llvm(21): Re-use worker-ids in order to simulate persistent worker threads.

6 years agoasync-llvm(20): Do some cleanup.
Michael Woerister [Wed, 26 Jul 2017 14:12:34 +0000 (16:12 +0200)]
async-llvm(20): Do some cleanup.

6 years agoasync-llvm(19): Already start LLVM while still translating.
Michael Woerister [Wed, 26 Jul 2017 14:02:32 +0000 (16:02 +0200)]
async-llvm(19): Already start LLVM while still translating.

6 years agoasync-llvm(18): Instantiate OngoingCrateTranslation before starting translation.
Michael Woerister [Wed, 26 Jul 2017 13:02:53 +0000 (15:02 +0200)]
async-llvm(18): Instantiate OngoingCrateTranslation before starting translation.

6 years agoasync-llvm(17): Create MSVC __imp_ symbols immediately for each module.
Michael Woerister [Wed, 26 Jul 2017 12:29:13 +0000 (14:29 +0200)]
async-llvm(17): Create MSVC __imp_ symbols immediately for each module.

6 years agoasync-llvm(16): Inject allocator shim into LLVM module immediately if necessary.
Michael Woerister [Wed, 26 Jul 2017 12:21:01 +0000 (14:21 +0200)]
async-llvm(16): Inject allocator shim into LLVM module immediately if necessary.

6 years agoasync-llvm(15): Don't require number of codegen units upfront.
Michael Woerister [Wed, 26 Jul 2017 12:18:11 +0000 (14:18 +0200)]
async-llvm(15): Don't require number of codegen units upfront.

6 years agoasync-llvm(14): Move LTO/codegen-unit conflict check to beginning of compilation...
Michael Woerister [Wed, 26 Jul 2017 12:14:40 +0000 (14:14 +0200)]
async-llvm(14): Move LTO/codegen-unit conflict check to beginning of compilation process.

6 years agoasync-llvm(13): Submit LLVM work packages from base::trans_crate().
Michael Woerister [Wed, 26 Jul 2017 10:35:23 +0000 (12:35 +0200)]
async-llvm(13): Submit LLVM work packages from base::trans_crate().

6 years agoasync-llvm(12): Hide no_integrated_as logic in write::run_passes.
Michael Woerister [Wed, 26 Jul 2017 09:50:45 +0000 (11:50 +0200)]
async-llvm(12): Hide no_integrated_as logic in write::run_passes.

6 years agoasync-llvm(11): Delay joining ongoing translation until right before linking.
Michael Woerister [Wed, 26 Jul 2017 09:41:34 +0000 (11:41 +0200)]
async-llvm(11): Delay joining ongoing translation until right before linking.

6 years agoasync-llvm(10): Factor compile output files cleanup into separate functions.
Michael Woerister [Wed, 26 Jul 2017 08:48:54 +0000 (10:48 +0200)]
async-llvm(10): Factor compile output files cleanup into separate functions.

6 years agoasync-llvm(9): Move OngoingCrateTranslation into back::write.
Michael Woerister [Wed, 26 Jul 2017 08:27:24 +0000 (10:27 +0200)]
async-llvm(9): Move OngoingCrateTranslation into back::write.

6 years agoasync-llvm(8): Clean up resource management and drop LLVM modules ASAP.
Michael Woerister [Tue, 25 Jul 2017 15:26:24 +0000 (17:26 +0200)]
async-llvm(8): Clean up resource management and drop LLVM modules ASAP.

6 years agoasync-llvm(7): Clean up error handling a bit.
Michael Woerister [Mon, 24 Jul 2017 14:18:11 +0000 (16:18 +0200)]
async-llvm(7): Clean up error handling a bit.

6 years agoasync-llvm(6): Make the LLVM work coordinator get its work package through a channel...
Michael Woerister [Mon, 24 Jul 2017 13:50:42 +0000 (15:50 +0200)]
async-llvm(6): Make the LLVM work coordinator get its work package through a channel instead of upfront.

6 years agoasync-llvm(5): Do continuous error handling on main thread.
Michael Woerister [Mon, 24 Jul 2017 12:51:00 +0000 (14:51 +0200)]
async-llvm(5): Do continuous error handling on main thread.

6 years agoasync-llvm(4): Move work coordination to separate thread in order to free up the...
Michael Woerister [Mon, 24 Jul 2017 12:21:28 +0000 (14:21 +0200)]
async-llvm(4): Move work coordination to separate thread in order to free up the main thread for translation.

6 years agoasync-llvm(3): Make write::CodegenContext Clone and Send.
Michael Woerister [Mon, 24 Jul 2017 11:54:18 +0000 (13:54 +0200)]
async-llvm(3): Make write::CodegenContext Clone and Send.

6 years agoasync-llvm(2): Decouple diagnostics emission from LLVM worker coordination.
Michael Woerister [Fri, 21 Jul 2017 15:15:18 +0000 (17:15 +0200)]
async-llvm(2): Decouple diagnostics emission from LLVM worker coordination.

6 years agoasync-llvm(1): Run LLVM already in trans_crate().
Michael Woerister [Fri, 21 Jul 2017 13:14:21 +0000 (15:14 +0200)]
async-llvm(1): Run LLVM already in trans_crate().

6 years agoborrowck: skip CFG construction when there is nothing to propagate
Ariel Ben-Yehuda [Sat, 29 Jul 2017 17:30:44 +0000 (20:30 +0300)]
borrowck: skip CFG construction when there is nothing to propagate

CFG construction takes a large amount of time and memory, especially for
large constants. If such a constant contains no actions on lvalues, it
can't have borrowck problems and can be ignored by it.

This removes the 4.9GB borrowck peak from #36799. It seems that HIR had
grown by 300MB and MIR had grown by 500MB from the last massif
collection and that remains to be investigated, but this at least shaves
the borrowck peak.

6 years agoAuto merge of #43562 - alexcrichton:no-clean-rebuild, r=petrochenkov
bors [Mon, 31 Jul 2017 08:35:36 +0000 (08:35 +0000)]
Auto merge of #43562 - alexcrichton:no-clean-rebuild, r=petrochenkov

rustbuild: Remove `--enable-llvm-clean-rebuild`

This was intended for bots back in the day where we'd persist caches of LLVM
builds across runs, but nowadays we don't do that on any of the bots so this
option is no longer necessary

6 years agoAuto merge of #43546 - nikomatsakis:issue-43132, r=arielb1
bors [Mon, 31 Jul 2017 04:58:10 +0000 (04:58 +0000)]
Auto merge of #43546 - nikomatsakis:issue-43132, r=arielb1

save subobligations in the projection cache

The projection cache explicitly chose not to "preserve" subobligations for projections, since the fulfillment context ought to have been doing so. But for the trait evaluation scheme that causes problems. This PR reproduces subobligations. This has the potential to slow down compilation, but minimal investigation suggests it does not do so.

One hesitation about this PR: I could not find a way to make a standalone test case for #43132 (but admittedly I did not try very hard).

Fixes #43132.

r? @arielb1

6 years agoAuto merge of #43519 - zackmdavis:long_diagnostics_ever_after, r=GuillaumeGomez
bors [Mon, 31 Jul 2017 01:00:13 +0000 (01:00 +0000)]
Auto merge of #43519 - zackmdavis:long_diagnostics_ever_after, r=GuillaumeGomez

a couple more error explanations for posterity

E0436, E0595, and moving E0569 to where it belongs in the file rather than being bizarrely out of numerical order

r? @GuillaumeGomez

6 years agoAuto merge of #43563 - tbu-:pr_from_str_radix_panic, r=alexcrichton
bors [Sun, 30 Jul 2017 22:39:23 +0000 (22:39 +0000)]
Auto merge of #43563 - tbu-:pr_from_str_radix_panic, r=alexcrichton

Document the `from_str_radix` panic

CC #42034

6 years agoDocument the `from_str_radix` panic
Tobias Bucher [Sun, 30 Jul 2017 21:20:54 +0000 (23:20 +0200)]
Document the `from_str_radix` panic

CC #42034

6 years agorustbuild: Remove `--enable-llvm-clean-rebuild`
Alex Crichton [Sun, 30 Jul 2017 20:48:49 +0000 (13:48 -0700)]
rustbuild: Remove `--enable-llvm-clean-rebuild`

This was intended for bots back in the day where we'd persist caches of LLVM
builds across runs, but nowadays we don't do that on any of the bots so this
option is no longer necessary

6 years agoAuto merge of #43556 - dmizuk:remove-z-opt-usage, r=arielb1
bors [Sun, 30 Jul 2017 20:19:53 +0000 (20:19 +0000)]
Auto merge of #43556 - dmizuk:remove-z-opt-usage, r=arielb1

librustc_driver: Remove -Z option from usage on stable compiler

The `-Z` flag has been disabled since Rust 1.19 stable, but it still shows in `rustc --help`.

This PR addresses the inconsistency by removing the message on the stable channel.

6 years agoadd docs for references as a primitive
QuietMisdreavus [Sun, 30 Jul 2017 19:59:08 +0000 (14:59 -0500)]
add docs for references as a primitive

6 years agoextended info for E0595 closure cannot mutate immutable local variable
Zack M. Davis [Fri, 28 Jul 2017 04:42:03 +0000 (21:42 -0700)]
extended info for E0595 closure cannot mutate immutable local variable

6 years agomove extended info for E0569 to numerical-order location in file
Zack M. Davis [Thu, 27 Jul 2017 22:08:29 +0000 (15:08 -0700)]
move extended info for E0569 to numerical-order location in file

We want the error explanations to appear in numerical order so that
they're easy to find. (Also, any other order would be arbitrary and thus
not constitute a Schelling point.) Bizarrely, the extended information
for E0569 was placed between E0244 and E0318 in
librustc_typeck/diagnostics.rs (when the code was introduced in
9a649c32). This commit moves it to be between E0562 and E0570, where it
belongs.

(Also, at reviewer request, say "Erroneous code example", the standard
verbiage that it has been decided that we say everywhere.)

6 years agoadd extended info for E0436 functional record update syntax needs struct
Zack M. Davis [Thu, 27 Jul 2017 21:22:49 +0000 (14:22 -0700)]
add extended info for E0436 functional record update syntax needs struct

This example focuses on struct-like enum variants, because it's not
immediately obvious in what other context we can get E0436 alone,
without any other, more serious, errors. (Triggering E0436 with a union
also emits a separate "union expressions should have exactly one field"
error.)

(One might argue that we ought to accept the functional record update
syntax for struct-like enums, but that is beyond the scope of this
error-index-comprehensiveness commit.)

6 years agosave the subobligations as well
Niko Matsakis [Sat, 29 Jul 2017 18:40:37 +0000 (21:40 +0300)]
save the subobligations as well

6 years agoAuto merge of #43515 - QuietMisdreavus:show-assoc-types, r=GuillaumeGomez
bors [Sun, 30 Jul 2017 17:42:32 +0000 (17:42 +0000)]
Auto merge of #43515 - QuietMisdreavus:show-assoc-types, r=GuillaumeGomez

rustdoc: print associated types in traits "implementors" section

When viewing a trait's implementors, they won't show anything about the implementation other than any bounds on the generics. You can see the full implementation details on the page for the type, but if the type is external (e.g. it's an extension trait being implemented for primitives), then you'll never be able to see the details of the implementation without opening the source code. This doesn't solve everything about that, but it does still show an incredibly useful piece of information: the associated types. This can help immensely for traits like `Deref` or `IntoIterator` in libstd, and also for traits like `IntoFuture` outside the standard library.

Fixes #24200

🚨 BIKESHED ALERT ðŸš¨ The indentation and sizing of the types is suspect. I put it in the small text so it wouldn't blend in with the next impl line. (It shares a CSS class with the where clauses, as you can see in the following image.) However, the indentation is nonstandard. I initially tried with no indentation (looked awkward and blended too well with the surrounding impls) and with 4-space indentation (too easy to confuse with where clauses), before settling on the 2-space indentation seen below. It's... okay, i guess. Open to suggestions.

![snippet of the implementors of IntoIterator, showing the associated types](https://user-images.githubusercontent.com/5217170/28697456-a4e01a12-7301-11e7-868e-2a6441d6c9e0.png)

6 years agodefault binding modes: add pat_binding_modes
Tobias Schottdorf [Fri, 21 Jul 2017 23:29:43 +0000 (19:29 -0400)]
default binding modes: add pat_binding_modes

This PR kicks off the implementation of the [default binding modes RFC][1] by
introducing the `pat_binding_modes` typeck table mentioned in the [mentoring
instructions][2].

`pat_binding_modes` is populated in `librustc_typeck/check/_match.rs` and
used wherever the HIR would be scraped prior to this PR. Unfortunately, one
blemish, namely a two callers to `contains_explicit_ref_binding`, remains.
This will likely have to be removed when the second part of [1], the
`pat_adjustments` table, is tackled. Appropriate comments have been added.

See #42640.

[1]: https://github.com/rust-lang/rfcs/pull/2005
[2]: https://github.com/rust-lang/rust/issues/42640#issuecomment-313535089

6 years agoAuto merge of #43543 - petrochenkov:32330, r=nikomatsakis
bors [Sun, 30 Jul 2017 12:48:20 +0000 (12:48 +0000)]
Auto merge of #43543 - petrochenkov:32330, r=nikomatsakis

Cleanup some remains of `hr_lifetime_in_assoc_type` compatibility lint

r? @nikomatsakis

6 years agolibrustc_driver: Remove -Z option from usage on stable compiler
Daiki Mizukami [Sun, 30 Jul 2017 09:17:22 +0000 (18:17 +0900)]
librustc_driver: Remove -Z option from usage on stable compiler

6 years agoresolve: Fix instability in import suggestions
Vadim Petrochenkov [Sat, 29 Jul 2017 23:28:30 +0000 (02:28 +0300)]
resolve: Fix instability in import suggestions

6 years agoAuto merge of #43551 - Mark-Simulacrum:rollup, r=Mark-Simulacrum
bors [Sun, 30 Jul 2017 01:40:11 +0000 (01:40 +0000)]
Auto merge of #43551 - Mark-Simulacrum:rollup, r=Mark-Simulacrum

Rollup of 8 pull requests

- Successful merges: #43409, #43501, #43509, #43512, #43513, #43536, #43544, #43549
- Failed merges:

6 years agoRollup merge of #43549 - alexcrichton:build-llvm, r=Mark-Simulacrum
Mark Simulacrum [Sun, 30 Jul 2017 00:03:58 +0000 (18:03 -0600)]
Rollup merge of #43549 - alexcrichton:build-llvm, r=Mark-Simulacrum

rustbuild: Enable building LLVM

I use this from time to time debugging LLVM builds, useful to have!

6 years agoRollup merge of #43544 - redox-os:update_redox_sys, r=sfackler
Mark Simulacrum [Sun, 30 Jul 2017 00:03:57 +0000 (18:03 -0600)]
Rollup merge of #43544 - redox-os:update_redox_sys, r=sfackler

Update redox sys

- Add JoinHandleExt
- Split FL and FD for fcntl

6 years agoRollup merge of #43536 - alexcrichton:privileged, r=TimNN
Mark Simulacrum [Sun, 30 Jul 2017 00:03:56 +0000 (18:03 -0600)]
Rollup merge of #43536 - alexcrichton:privileged, r=TimNN

Flag docker invocations as --privileged on CI

When upgrading to LLVM 5.0 it was found that the leak sanitizer tests were
failing with fatal errors, but they were passing locally when run. Turns out it
looks like they may be using new ptrace-like syscalls so the docker container
now needs `--privileged` when executing to complete the test.

6 years agoRollup merge of #43513 - alexcrichton:inline-repeat, r=BurntSushi
Mark Simulacrum [Sun, 30 Jul 2017 00:03:55 +0000 (18:03 -0600)]
Rollup merge of #43513 - alexcrichton:inline-repeat, r=BurntSushi

std: Mark `Layout::repeat` as `#[inline]`

This fixes an optimization regression by allowing LLVM to see through more
functions.

Closes #43272

6 years agoRollup merge of #43512 - arielb1:untyped-move-paths, r=eddyb
Mark Simulacrum [Sun, 30 Jul 2017 00:03:54 +0000 (18:03 -0600)]
Rollup merge of #43512 - arielb1:untyped-move-paths, r=eddyb

erase types in the move-path abstract domain

Leaving types unerased would lead to 2 types with a different "name"
getting different move-paths, which would cause major brokenness (see
e.g. #42903).

This does not fix any *known* issue, but is required if we want to use
abs_domain with non-erased regions (because the same can easily
have different names). cc @RalfJung.

r? @eddyb

6 years agoRollup merge of #43509 - QuietMisdreavus:method-src, r=GuillaumeGomez
Mark Simulacrum [Sun, 30 Jul 2017 00:03:53 +0000 (18:03 -0600)]
Rollup merge of #43509 - QuietMisdreavus:method-src, r=GuillaumeGomez

rustdoc: add [src] links to associated functions inside an impl block

While impl blocks currently have a `[src]` link to show the source for the impl block as a whole, individual methods inside that impl block do not. This can pose a problem for structs with a lot of methods, like many in libstd. This change adds little `[src]` links to individual methods that point directly to the function in the bundled source.

fixes #12932

![methods on HashMap, showing the new src links](https://user-images.githubusercontent.com/5217170/28686066-9e7a19de-72cf-11e7-8e6b-b7d60fa33032.png)

6 years agoRollup merge of #43501 - topecongiro:span-to-whereclause, r=nrc
Mark Simulacrum [Sun, 30 Jul 2017 00:03:52 +0000 (18:03 -0600)]
Rollup merge of #43501 - topecongiro:span-to-whereclause, r=nrc

Add Span to ast::WhereClause

This PR adds `Span` field to `ast::WhereClause`. The motivation here is to make rustfmt's life easier when recovering comments before and after where clause.
r? @nrc

6 years agoRollup merge of #43409 - tshepang:concise, r=steveklabnik
Mark Simulacrum [Sun, 30 Jul 2017 00:03:51 +0000 (18:03 -0600)]
Rollup merge of #43409 - tshepang:concise, r=steveklabnik

doc: make into_iter example more concise

Also, remove dupe example

6 years agoAuto merge of #43009 - GuillaumeGomez:unused-doc-comments, r=nrc
bors [Sat, 29 Jul 2017 23:01:45 +0000 (23:01 +0000)]
Auto merge of #43009 - GuillaumeGomez:unused-doc-comments, r=nrc

Throw errors when doc comments are added where they're unused

#42617

6 years agoUpdate rls submodule
Guillaume Gomez [Sat, 29 Jul 2017 18:29:50 +0000 (20:29 +0200)]
Update rls submodule

6 years agoFlag docker invocations as --privileged on CI
Alex Crichton [Sat, 29 Jul 2017 03:30:37 +0000 (20:30 -0700)]
Flag docker invocations as --privileged on CI

When upgrading to LLVM 5.0 it was found that the leak sanitizer tests were
failing with fatal errors, but they were passing locally when run. Turns out it
looks like they may be using new ptrace-like syscalls so the docker container
now needs `--privileged` when executing to complete the test.

6 years agorustbuild: Enable building LLVM
Alex Crichton [Sat, 29 Jul 2017 20:39:43 +0000 (13:39 -0700)]
rustbuild: Enable building LLVM

I use this from time to time debugging LLVM builds, useful to have!

6 years agoAuto merge of #43541 - gaurikholkar:lifetime_errors, r=nikomatsakis
bors [Sat, 29 Jul 2017 19:41:53 +0000 (19:41 +0000)]
Auto merge of #43541 - gaurikholkar:lifetime_errors, r=nikomatsakis

Changing E0623 error message - both anonymous lifetime regions

Changing the error message to
```
error[E0623]: lifetime mismatch
  --> $DIR/ex3-both-anon-regions.rs:12:12
   |
11 | fn foo(x: &mut Vec<&u8>, y: &u8) {
   |                    ---      --- these references are not declared with the same lifetime...
12 |     x.push(y);
   |            ^ ...but data from `y` flows into `x` here

error: aborting due to previous error
```
cc @nikomatsakis @aturon @jonathandturner

r? @nikomatsakis

6 years agostd: Mark `Layout::repeat` as `#[inline]`
Alex Crichton [Thu, 27 Jul 2017 21:53:44 +0000 (14:53 -0700)]
std: Mark `Layout::repeat` as `#[inline]`

This fixes an optimization regression by allowing LLVM to see through more
functions.

Closes #43272

6 years agoSplit FL and FD fcntls
Jeremy Soller [Sat, 29 Jul 2017 14:15:37 +0000 (08:15 -0600)]
Split FL and FD fcntls

6 years agoRedox: Add JoinHandleExt (matching Unix version)
Ian Douglas Scott [Tue, 11 Jul 2017 03:44:14 +0000 (20:44 -0700)]
Redox: Add JoinHandleExt (matching Unix version)

6 years agoCleanup some remains of `hr_lifetime_in_assoc_type` compatibility lint
Vadim Petrochenkov [Sat, 29 Jul 2017 14:19:57 +0000 (17:19 +0300)]
Cleanup some remains of `hr_lifetime_in_assoc_type` compatibility lint

6 years agoprint associated types in traits "implementors" section
QuietMisdreavus [Fri, 28 Jul 2017 00:21:10 +0000 (19:21 -0500)]
print associated types in traits "implementors" section

6 years agoUpdate cargo version
Guillaume Gomez [Sat, 29 Jul 2017 12:35:09 +0000 (14:35 +0200)]
Update cargo version

6 years agoAuto merge of #43534 - alexcrichton:cargo-target-runner, r=Mark-Simulacrum
bors [Sat, 29 Jul 2017 12:30:12 +0000 (12:30 +0000)]
Auto merge of #43534 - alexcrichton:cargo-target-runner, r=Mark-Simulacrum

rustbuild: Use Cargo's "target runner"

This commit leverages a relatively new feature in Cargo to execute
cross-compiled tests, the `target.$target.runner` configuration. We configure it
through environment variables in rustbuild and this avoids the need for us to
locate and run tests after-the-fact, instead relying on Cargo to do all that
execution for us.

6 years agochanging E0623 error message
gaurikholkar [Sat, 29 Jul 2017 12:07:05 +0000 (17:37 +0530)]
changing E0623 error message

6 years agoAuto merge of #43530 - alexcrichton:update-freebsd-compilers, r=Mark-Simulacrum,cuviper
bors [Sat, 29 Jul 2017 08:48:57 +0000 (08:48 +0000)]
Auto merge of #43530 - alexcrichton:update-freebsd-compilers, r=Mark-Simulacrum,cuviper

rustbuild: Update cross-compilers for FreeBSD

When working through bugs for the LLVM 5.0 upgrade it looks like the FreeBSD
cross compilers we're currently using are unable to build LLVM, failing with
references to the function `std::to_string` claiming it doesn't exist. I don't
actually know what this function is, but assuming that it was added in a more
recent version of a C++ standard I've updated the gcc versions for the
toolchains we're using. This made the error go away!

6 years agoAuto merge of #43527 - alexcrichton:different-llvm-cross, r=Mark-Simulacrum
bors [Sat, 29 Jul 2017 06:13:55 +0000 (06:13 +0000)]
Auto merge of #43527 - alexcrichton:different-llvm-cross, r=Mark-Simulacrum

rustbuild: Tweak how we cross-compile LLVM

In preparation for upgrading to LLVM 5.0 it looks like we need to tweak how we
cross compile LLVM slightly. It's using `CMAKE_SYSTEM_NAME` to infer whether to
build libFuzzer which only works on some platforms, and then once we configure
that it needs to apparently reach into the host build area to try to compile
`llvm-config` as well. Once these are both configured, though, it looks like we
can successfully cross-compile LLVM.

6 years agoAuto merge of #43492 - lu-zero:master, r=alexcrichton
bors [Sat, 29 Jul 2017 03:58:18 +0000 (03:58 +0000)]
Auto merge of #43492 - lu-zero:master, r=alexcrichton

More Altivec Intrinsics

6 years agoAuto merge of #43518 - cuviper:aapcs_vfp, r=eddyb
bors [Sat, 29 Jul 2017 01:43:03 +0000 (01:43 +0000)]
Auto merge of #43518 - cuviper:aapcs_vfp, r=eddyb

Support homogeneous aggregates for hard-float ARM

Hard-float ARM targets use the AAPCS-VFP ABI, which passes and returns
homogeneous float/vector aggregates in the VFP registers.

Fixes #43329.

r? @eddyb

6 years agorustbuild: Use Cargo's "target runner"
Alex Crichton [Sat, 29 Jul 2017 00:52:44 +0000 (17:52 -0700)]
rustbuild: Use Cargo's "target runner"

This commit leverages a relatively new feature in Cargo to execute
cross-compiled tests, the `target.$target.runner` configuration. We configure it
through environment variables in rustbuild and this avoids the need for us to
locate and run tests after-the-fact, instead relying on Cargo to do all that
execution for us.

6 years agorustbuild: Update cross-compilers for FreeBSD
Alex Crichton [Fri, 28 Jul 2017 21:26:02 +0000 (14:26 -0700)]
rustbuild: Update cross-compilers for FreeBSD

When working through bugs for the LLVM 5.0 upgrade it looks like the FreeBSD
cross compilers we're currently using are unable to build LLVM, failing with
references to the function `std::to_string` claiming it doesn't exist. I don't
actually know what this function is, but assuming that it was added in a more
recent version of a C++ standard I've updated the gcc versions for the
toolchains we're using. This made the error go away!

6 years agorustbuild: Tweak how we cross-compile LLVM
Alex Crichton [Fri, 28 Jul 2017 19:17:52 +0000 (12:17 -0700)]
rustbuild: Tweak how we cross-compile LLVM

In preparation for upgrading to LLVM 5.0 it looks like we need to tweak how we
cross compile LLVM slightly. It's using `CMAKE_SYSTEM_NAME` to infer whether to
build libFuzzer which only works on some platforms, and then once we configure
that it needs to apparently reach into the host build area to try to compile
`llvm-config` as well. Once these are both configured, though, it looks like we
can successfully cross-compile LLVM.

6 years agoAuto merge of #43230 - alexcrichton:more-tokenstream, r=nrc,jseyfried
bors [Fri, 28 Jul 2017 18:31:52 +0000 (18:31 +0000)]
Auto merge of #43230 - alexcrichton:more-tokenstream, r=nrc,jseyfried

Implement tokenization for some items in proc_macro

This PR is a partial implementation of https://github.com/rust-lang/rust/issues/43081 targeted towards preserving span information in attribute-like procedural macros. Currently all attribute-like macros will lose span information with the input token stream if it's iterated over due to the inability of the compiler to losslessly tokenize an AST node. This PR takes a strategy of saving off a list of tokens in particular AST nodes to return a lossless tokenized version. There's a few limitations with this PR, however, so the old fallback remains in place.