Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 9 pull requests #61758

Merged
merged 41 commits into from
Jun 12, 2019
Merged

Rollup of 9 pull requests #61758

merged 41 commits into from
Jun 12, 2019

Commits on Jun 1, 2019

  1. Configuration menu
    Copy the full SHA
    cb12460 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    67fd995 View commit details
    Browse the repository at this point in the history

Commits on Jun 8, 2019

  1. Configuration menu
    Copy the full SHA
    5fb099d View commit details
    Browse the repository at this point in the history
  2. improve style

    Electron-libre committed Jun 8, 2019
    Configuration menu
    Copy the full SHA
    ad91a8e View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    4123b5d View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    dd442a1 View commit details
    Browse the repository at this point in the history
  5. cast vec to slices

    Electron-libre committed Jun 8, 2019
    Configuration menu
    Copy the full SHA
    4c242a9 View commit details
    Browse the repository at this point in the history
  6. fix libsyntax test

    Electron-libre committed Jun 8, 2019
    Configuration menu
    Copy the full SHA
    0a4504d View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    26d4c8f View commit details
    Browse the repository at this point in the history

Commits on Jun 9, 2019

  1. Configuration menu
    Copy the full SHA
    20efb19 View commit details
    Browse the repository at this point in the history
  2. Inline raw method

    Mark-Simulacrum committed Jun 9, 2019
    Configuration menu
    Copy the full SHA
    7795b15 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    dc13072 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    a859440 View commit details
    Browse the repository at this point in the history
  5. Introduce InnerSpan abstraction

    This should be used when trying to get at subsets of a larger span,
    especially when the larger span is not available in the code attempting
    to work with those subsets (especially common in the fmt_macros crate).
    
    This is usually a good replacement for (BytePos, BytePos) and (usize,
    usize) tuples.
    
    This commit also removes from_inner_byte_pos, since it took usize
    arguments, which is error prone.
    Mark-Simulacrum committed Jun 9, 2019
    Configuration menu
    Copy the full SHA
    b1c357e View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    6b9740b View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    45df52f View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    8590074 View commit details
    Browse the repository at this point in the history
  9. Pass cflags rather than cxxflags to LLVM as CMAKE_C_FLAGS

    We mistakenly pass cxxflags from the configuration to LLVM build as
    CMAKE_C_FLAGS.
    petrhosek committed Jun 9, 2019
    Configuration menu
    Copy the full SHA
    715578e View commit details
    Browse the repository at this point in the history

Commits on Jun 10, 2019

  1. Configuration menu
    Copy the full SHA
    f9f8bfa View commit details
    Browse the repository at this point in the history
  2. Overlap locals that never have storage live at the same time

    ...and are only included in a single variant.
    tmandry committed Jun 10, 2019
    Configuration menu
    Copy the full SHA
    7868758 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    9de451c View commit details
    Browse the repository at this point in the history
  4. Add test suite

    tmandry committed Jun 10, 2019
    Configuration menu
    Copy the full SHA
    63d73fd View commit details
    Browse the repository at this point in the history
  5. Small review fixes

    tmandry committed Jun 10, 2019
    Configuration menu
    Copy the full SHA
    a38991f View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    66e7493 View commit details
    Browse the repository at this point in the history
  7. Configuration menu
    Copy the full SHA
    6680d03 View commit details
    Browse the repository at this point in the history
  8. Configuration menu
    Copy the full SHA
    fbdff56 View commit details
    Browse the repository at this point in the history
  9. Configuration menu
    Copy the full SHA
    c158d1c View commit details
    Browse the repository at this point in the history
  10. Configuration menu
    Copy the full SHA
    9f3ad88 View commit details
    Browse the repository at this point in the history

Commits on Jun 11, 2019

  1. Configuration menu
    Copy the full SHA
    7d32113 View commit details
    Browse the repository at this point in the history
  2. ci: Collect CPU usage statistics on Azure

    This commit adds a script which we'll execute on Azure Pipelines which
    is intended to run in the background and passively collect CPU usage
    statistics for our builders. The intention here is that we can use this
    information over time to diagnose issues with builders, see where we can
    optimize our build, fix parallelism issues, etc. This might not end up
    being too useful in the long run but it's data we've wanted to collect
    for quite some time now, so here's a stab at it!
    
    Comments about how this is intended to work can be found in the python
    script used here to collect CPU usage statistics.
    
    Closes rust-lang#48828
    alexcrichton committed Jun 11, 2019
    Configuration menu
    Copy the full SHA
    f2c37a5 View commit details
    Browse the repository at this point in the history
  3. is_fp and is_floating_point do the same thing, remove the former

    also consistently mark all these is_* methods for inlining
    RalfJung committed Jun 11, 2019
    Configuration menu
    Copy the full SHA
    87d5fe0 View commit details
    Browse the repository at this point in the history
  4. More review fixes

    tmandry committed Jun 11, 2019
    Configuration menu
    Copy the full SHA
    aeefbc4 View commit details
    Browse the repository at this point in the history

Commits on Jun 12, 2019

  1. Rollup merge of rust-lang#60187 - tmandry:generator-optimization, r=e…

    …ddyb
    
    Generator optimization: Overlap locals that never have storage live at the same time
    
    The specific goal of this optimization is to optimize async fns which use `await!`. Notably, `await!` has an enclosing scope around the futures it awaits ([definition](https://github.com/rust-lang/rust/blob/08bfe16129b0621bc90184f8704523d4929695ef/src/libstd/macros.rs#L365-L381)), which we rely on to implement the optimization.
    
    More generally, the optimization allows overlapping the storage of some locals which are never storage-live at the same time. **We care about storage-liveness when computing the layout, because knowing a field is `StorageDead` is the only way to prove it will not be accessed, either directly or through a reference.**
    
    To determine whether we can overlap two locals in the generator layout, we look at whether they might *both* be `StorageLive` at any point in the MIR. We use the `MaybeStorageLive` dataflow analysis for this. We iterate over every location in the MIR, and build a bitset for each local of the locals it might potentially conflict with.
    
    Next, we assign every saved local to one or more variants. The variants correspond to suspension points, and we include the set of locals live across a given suspension point in the variant. (Note that we use liveness instead of storage-liveness here; this ensures that the local has actually been initialized in each variant it has been included in. If the local is not live across a suspension point, then it doesn't need to be included in that variant.). It's important to note that the variants are a "view" into our layout.
    
    For the layout computation, we use a simplified approach.
    
    1. Start with the set of locals assigned to only one variant. The rest are disqualified.
    2. For each pair of locals which may conflict *and are not assigned to the same variant*, we pick one local to disqualify from overlapping.
    
    Disqualified locals go into a non-overlapping "prefix" at the beginning of our layout. This means they always have space reserved for them. All the locals that are allowed to overlap in each variant are then laid out after this prefix, in the "overlap zone".
    
    So, if A and B were disqualified, and X, Y, and Z were all eligible for overlap, our generator might look something like this:
    
    You can think of a generator as an enum, where some fields are shared between variants. e.g.
    
    ```rust
    enum Generator {
      Unresumed,
      Poisoned,
      Returned,
      Suspend0(A, B, X),
      Suspend1(B),
      Suspend2(A, Y, Z),
    }
    ```
    
    where every mention of `A` and `B` refer to the same field, which does not move when changing variants. Note that `A` and `B` would automatically be sent to the prefix in this example. Assuming that `X` is never `StorageLive` at the same time as either `Y` or `Z`, it would be allowed to overlap with them.
    
    Note that if two locals (`Y` and `Z` in this case) are assigned to the same variant in our generator, their memory would never overlap in the layout. Thus they can both be eligible for the overlapping section, even if they are storage-live at the same time.
    
    ---
    
    Depends on:
    - [x] rust-lang#59897 Multi-variant layouts for generators
    - [x] rust-lang#60840 Preserve local scopes in generator MIR
    - [x] rust-lang#61373 Emit StorageDead along unwind paths for generators
    
    Before merging:
    
    - [x] ~Wrap the types of all generator fields in `MaybeUninitialized` in layout::ty::field~ (opened rust-lang#60889)
    - [x] Make PR description more complete (e.g. explain why storage liveness is important and why we have to check every location)
    - [x] Clean up TODO
    - [x] Fix the layout code to enforce that the same field never moves around in the generator
    - [x] Add tests for async/await
    - [x] ~Reduce # bits we store by half, since the conflict relation is symmetric~ (note: decided not to do this, for simplicity)
    - [x] Store liveness information for each yield point in our `GeneratorLayout`, that way we can emit more useful debuginfo AND tell miri which fields are definitely initialized for a given variant (see discussion at rust-lang#59897 (comment))
    Centril committed Jun 12, 2019
    Configuration menu
    Copy the full SHA
    a60a5db View commit details
    Browse the repository at this point in the history
  2. Rollup merge of rust-lang#61348 - dronesforwork-forks:clone-from, r=K…

    …odrAus
    
    Implement Clone::clone_from for Option and Result
    
    See rust-lang#28481
    Centril committed Jun 12, 2019
    Configuration menu
    Copy the full SHA
    b5184e5 View commit details
    Browse the repository at this point in the history
  3. Rollup merge of rust-lang#61568 - Mark-Simulacrum:symbol-fmt-macros, …

    …r=estebank
    
    Use Symbol, Span in libfmt_macros
    
    I'm not super happy with this, personally, but I think it might be a decent start -- happy to take suggestions as to how to expand this or change things further.
    
    r? @estebank
    
    Fixes rust-lang#60795
    Centril committed Jun 12, 2019
    Configuration menu
    Copy the full SHA
    d78260d View commit details
    Browse the repository at this point in the history
  4. Rollup merge of rust-lang#61632 - alexcrichton:azure-pipelines-cpu, r…

    …=pietroalbini
    
    ci: Collect CPU usage statistics on Azure
    
    This commit adds a script which we'll execute on Azure Pipelines which
    is intended to run in the background and passively collect CPU usage
    statistics for our builders. The intention here is that we can use this
    information over time to diagnose issues with builders, see where we can
    optimize our build, fix parallelism issues, etc. This might not end up
    being too useful in the long run but it's data we've wanted to collect
    for quite some time now, so here's a stab at it!
    
    Comments about how this is intended to work can be found in the python
    script used here to collect CPU usage statistics.
    
    Closes rust-lang#48828
    Centril committed Jun 12, 2019
    Configuration menu
    Copy the full SHA
    6933034 View commit details
    Browse the repository at this point in the history
  5. Rollup merge of rust-lang#61654 - Electron-libre:use_slice_patterns_i…

    …n_rustc, r=oli-obk,Centril
    
    use pattern matching for slices destructuring
    
    refs rust-lang#61542
    
    Use slices pattern where it seems to make sense .
    Centril committed Jun 12, 2019
    Configuration menu
    Copy the full SHA
    9f22708 View commit details
    Browse the repository at this point in the history
  6. Rollup merge of rust-lang#61671 - koalatux:nth-back-range, r=KodrAus

    implement nth_back for Range(Inclusive)
    
    This is part of  rust-lang#54054.
    Centril committed Jun 12, 2019
    Configuration menu
    Copy the full SHA
    3a8dc44 View commit details
    Browse the repository at this point in the history
  7. Rollup merge of rust-lang#61688 - RalfJung:is-floating-point, r=cramertj

    is_fp and is_floating_point do the same thing, remove the former
    
    also consistently mark all these `is_*` methods for inlining
    Centril committed Jun 12, 2019
    Configuration menu
    Copy the full SHA
    ba5b04a View commit details
    Browse the repository at this point in the history
  8. Rollup merge of rust-lang#61705 - petrhosek:llvm-cflags, r=alexcrichton

    Pass cflags rather than cxxflags to LLVM as CMAKE_C_FLAGS
    
    We mistakenly pass cxxflags from the configuration to LLVM build as
    CMAKE_C_FLAGS.
    Centril committed Jun 12, 2019
    Configuration menu
    Copy the full SHA
    adea131 View commit details
    Browse the repository at this point in the history
  9. Rollup merge of rust-lang#61734 - mati865:books, r=alexcrichton

    Migrate rust-by-example to MdBook2
    Centril committed Jun 12, 2019
    Configuration menu
    Copy the full SHA
    4748b5b View commit details
    Browse the repository at this point in the history