1. 02 8月, 2017 3 次提交
    • I
      Fixed all unnecessary muts in language core · 400075d9
      Isaac van Bakel 提交于
      400075d9
    • I
      Fixed refs being marked used mutably on mut deref · 35b9bd05
      Isaac van Bakel 提交于
      Boxes are the exception - since a Box is as mutable as its contents.
      35b9bd05
    • B
      Auto merge of #43506 - michaelwoerister:async-llvm, r=alexcrichton · e772c28d
      bors 提交于
      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
      e772c28d
  2. 01 8月, 2017 10 次提交
    • B
      Auto merge of #43568 - arielb1:constant-recovery, r=eddyb · c2407516
      bors 提交于
      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.
      c2407516
    • M
    • M
      b8d44135
    • B
      Auto merge of #43560 - QuietMisdreavus:ref-docs, r=steveklabnik · 0bf018c5
      bors 提交于
      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
      0bf018c5
    • B
      Auto merge of #43552 - petrochenkov:instab, r=jseyfried · 6e8452ee
      bors 提交于
      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
      6e8452ee
    • B
      Auto merge of #43533 - nrc:macro-save, r=jseyfried, · df90a546
      bors 提交于
      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
      df90a546
    • N
      review changes · 27b9182d
      Nick Cameron 提交于
      27b9182d
    • B
      Auto merge of #43547 - arielb1:no-borrow-no-check, r=nikomatsakis · ebf74d99
      bors 提交于
      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
      ebf74d99
    • B
      Auto merge of #43399 - tschottdorf:bndmode-pat-adjustments, r=nikomatsakis · 37c7d0eb
      bors 提交于
      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
      37c7d0eb
    • M
      async-llvm(27): Move #[rustc_error] check to an earlier point in order to... · b1e043e9
      Michael Woerister 提交于
      async-llvm(27): Move #[rustc_error] check to an earlier point in order to restore some test expections.
      b1e043e9
  3. 31 7月, 2017 27 次提交