Permalink
Commits on Sep 20, 2017
  1. Auto merge of #44707 - GuillaumeGomez:rollup, r=arielb1

    bors committed Sep 20, 2017
    Rollup of 5 pull requests
    
    - Successful merges: #44513, #44626, #44689, #44693, #44703
    - Failed merges:
  2. Auto merge of #44355 - Xaeroxe:optimize_drain_filter, r=alexcrichton

    bors committed Sep 20, 2017
    Optimize drain_filter
    
    This PR cuts out two copies from each iteration of `drain_filter` by exchanging the swap operation for a copy_nonoverlapping function call instead.  Since the data being swapped is not needed anymore we can just overwrite it instead.
  3. Auto merge of #44350 - GuillaumeGomez:id-false-positive, r=QuietMisdr…

    bors committed Sep 20, 2017
    …eavus
    
    Improve how rustdoc warnings are displayed
    
    cc @rust-lang/dev-tools
    r? @nrc
Commits on Sep 19, 2017
  1. Auto merge of #44505 - nikomatsakis:lotsa-comments, r=steveklabnik

    bors committed Sep 19, 2017
    rework the README.md for rustc and add other readmes
    
    OK, so, long ago I committed to the idea of trying to write some high-level documentation for rustc. This has proved to be much harder for me to get done than I thought it would! This PR is far from as complete as I had hoped, but I wanted to open it so that people can give me feedback on the conventions that it establishes. If this seems like a good way forward, we can land it and I will open an issue with a good check-list of things to write (and try to take down some of them myself).
    
    Here are the conventions I established on which I would like feedback.
    
    **Use README.md files**. First off, I'm aiming to keep most of the high-level docs in `README.md` files, rather than entries on forge. My thought is that such files are (a) more discoverable than forge and (b) closer to the code, and hence can be edited in a single PR. However, since they are not *in the code*, they will naturally get out of date, so the intention is to focus on the highest-level details, which are least likely to bitrot. I've included a few examples of common functions and so forth, but never tried to (e.g.) exhaustively list the names of functions and so forth.
        - I would like to use the tidy scripts to try and check that these do not go out of date. Future work.
    
    **librustc/README.md as the main entrypoint.** This seems like the most natural place people will look first. It lays out how the crates are structured and **is intended** to give pointers to the main data structures of the compiler (I didn't update that yet; the existing material is terribly dated).
    
    **A glossary listing abbreviations and things.** It's much harder to read code if you don't know what some obscure set of letters like `infcx` stands for.
    
    **Major modules each have their own README.md that documents the high-level idea.** For example, I wrote some stuff about `hir` and `ty`. Both of them have many missing topics, but I think that is roughly the level of depth that would be good. The idea is to give people a "feeling" for what the code does.
    
    What is missing primarily here is lots of content. =) Here are some things I'd like to see:
    
    - A description of what a QUERY is and how to define one
        - Some comments for `librustc/ty/maps.rs`
    - An overview of how compilation proceeds now (i.e., the hybrid demand-driven and forward model) and how we would like to see it going in the future (all demand-driven)
    - Some coverage of how incremental will work under red-green
    - An updated list of the major IRs in use of the compiler (AST, HIR, TypeckTables, MIR) and major bits of interesting code (typeck, borrowck, etc)
    - More advice on how to use `x.py`, or at least pointers to that
    - Good choice for `config.toml`
    - How to use `RUST_LOG` and other debugging flags (e.g., `-Zverbose`, `-Ztreat-err-as-bug`)
    - Helpful conventions for `debug!` statement formatting
    
    cc @rust-lang/compiler @mgattozzi
  2. Improve how warnings are displayed

    GuillaumeGomez committed Sep 6, 2017
  3. Rollup merge of #44703 - GuillaumeGomez:missing-io-links, r=QuietMisd…

    GuillaumeGomez committed on GitHub Sep 19, 2017
    …reavus
    
    Add some missing links in io docs
    
    r? @rust-lang/docs
  4. Rollup merge of #44693 - mssun:native-static-libs-patch, r=alexcrichton

    GuillaumeGomez committed on GitHub Sep 19, 2017
    Fix a typo in rustc help menu
    
    Change from native-static-deps to native-static-libs.
    
    Fix a typo introduced by this merged pull request: #43067
  5. Rollup merge of #44689 - behnam:unicode, r=sfackler

    GuillaumeGomez committed on GitHub Sep 19, 2017
    [libstd_unicode] Expose UnicodeVersion type
    
    In <#42998>, we added an
    uninstantiable type for the internal `UNICODE_VERSION` value,
    `UnicodeVersion`, but it was not made public to the outside of the
    crate, resulting in the value becoming less useful. Here we make the
    type accessible from the outside.
    
    Also add a run-pass test to make sure the type and value can be accessed
    as intended.
  6. Rollup merge of #44626 - MaulingMonkey:lld-link-natvis-regression-fix…

    GuillaumeGomez committed on GitHub Sep 19, 2017
    …, r=michaelwoerister
    
    Skip passing /natvis to lld-link until supported.
    
    ### Overview
    
    Teaching rustc about MSVC's undocumented linker flag, /NATVIS, broke rustc's compatability with LLVM's `lld-link` frontend, as it does not recognize the flag.  This pull request works around the problem by excluding `lld-link` by name.  @retep998 discovered this regression.
    
    ### Possible Issues
    
    - Other linkers that try to be compatible with the MSVC linker flavor may also be broken and in need of workarounds.
    - Warning about the workaround may be overkill for a minor reduction in debug functionality.
    - Depending on how long this workaround sticks around, it may eventually be preferred to version check `lld-link` instead of assuming all versions are incompatible.
    
    ### Relevant issues
    * Broke in #43221 Embed MSVC .natvis files into .pdbs and mangle debuginfo for &str, *T, and [T].
    * LLVM patched in llvm-mirror/lld@27b9c42 to ignore the flag instead of erroring.
    
    r? @michaelwoerister
  7. Rollup merge of #44513 - redox-os:master, r=alexcrichton

    GuillaumeGomez committed on GitHub Sep 19, 2017
    [Redox] Sync with upstream syscall library
    
    This syncs the vendored syscalls with their upstream versions.
  8. incorporate suggestions from arielb1

    nikomatsakis committed Sep 19, 2017
  9. define span

    nikomatsakis committed Sep 18, 2017
  10. Auto merge of #44620 - zackmdavis:rfc_1940_housekeeping, r=nikomatsakis

    bors committed Sep 19, 2017
    RFC 1940 housekeeping
    
    * move test to own directory, as requested in #43302 (comment)
    * exercise trait methods in test
    * unstable book section
    
    r? @nikomatsakis
  11. apply various nits

    nikomatsakis committed Sep 15, 2017
  12. rework the README.md for rustc and add other readmes

    nikomatsakis committed Aug 31, 2017
    This takes way longer than I thought it would. =)
  13. Auto merge of #44601 - alexcrichton:lower-attributes-in-hir, r=nrc

    bors committed Sep 19, 2017
    rustc: Forbid interpolated tokens in the HIR
    
    Right now the HIR contains raw `syntax::ast::Attribute` structure but nowadays
    these can contain arbitrary tokens. One variant of the `Token` enum is an
    "interpolated" token which basically means to shove all the tokens for a
    nonterminal in this position. A "nonterminal" in this case is roughly analagous
    to a macro argument:
    
        macro_rules! foo {
            ($a:expr) => {
                // $a is a nonterminal as an expression
            }
        }
    
    Currently nonterminals contain namely items and expressions, and this poses a
    problem for incremental compilation! With incremental we want a stable hash of
    all HIR items, but this means we may transitively need a stable hash *of the
    entire AST*, which is certainly not stable w/ node ids and whatnot. Hence today
    there's a "bug" where the "stable hash" of an AST is just the raw hash value of
    the AST, and this only arises with interpolated nonterminals. The downside of
    this approach, however, is that a bunch of errors get spewed out during
    compilation about how this isn't a great idea.
    
    This PR is focused at fixing these warnings, basically deleting them from the
    compiler. The implementation here is to alter attributes as they're lowered from
    the AST to HIR, expanding all nonterminals in-place as we see them. This code
    for expanding a nonterminal to a token stream already exists for the
    `proc_macro` crate, so we basically just reuse the same implementation there.
    
    After this PR it's considered a bug to have an `Interpolated` token and hence
    the stable hash implementation simply uses `bug!` in this location.
    
    Closes #40946
  14. Fix a typo in rustc help menu

    mssun committed Sep 19, 2017
    Change from native-static-deps to native-static-libs.
  15. Auto merge of #44026 - QuietMisdreavus:trimmed-std, r=steveklabnik

    bors committed Sep 19, 2017
    hide internal types/traits from std docs via new #[doc(masked)] attribute
    
    Fixes #43701 (hopefully for good this time)
    
    This PR introduces a new parameter to the `#[doc]` attribute that rustdoc looks for on `extern crate` statements. When it sees `#[doc(masked)]` on such a statement, it hides traits and types from that crate from appearing in either the "Trait Implementations" section of many type pages, or the "Implementors" section of trait pages. This is then applied to the `libc`/`rand`/`compiler_builtins` imports in libstd to prevent those crates from creating broken links in the std docs.
    
    Like in #43348, this also introduces a feature gate, `doc_masked`, that controls the use of this parameter.
    
    To view the std docs generated with this change, head to https://tonberry.quietmisdreavus.net/std-43701/std/index.html.
  16. [libstd_unicode] Expose UnicodeVersion type

    behnam committed Sep 19, 2017
    In <#42998>, we added an
    uninstantiable type for the internal `UNICODE_VERSION` value,
    `UnicodeVersion`, but it was not made public to the outside of the
    crate, resulting in the value becoming less useful. Here we make the
    type accessible from the outside.
    
    Also add a run-pass test to make sure the type and value can be accessed
    as intended.
  17. rustc: Forbid interpolated tokens in the HIR

    alexcrichton committed Sep 15, 2017
    Right now the HIR contains raw `syntax::ast::Attribute` structure but nowadays
    these can contain arbitrary tokens. One variant of the `Token` enum is an
    "interpolated" token which basically means to shove all the tokens for a
    nonterminal in this position. A "nonterminal" in this case is roughly analagous
    to a macro argument:
    
        macro_rules! foo {
            ($a:expr) => {
                // $a is a nonterminal as an expression
            }
        }
    
    Currently nonterminals contain namely items and expressions, and this poses a
    problem for incremental compilation! With incremental we want a stable hash of
    all HIR items, but this means we may transitively need a stable hash *of the
    entire AST*, which is certainly not stable w/ node ids and whatnot. Hence today
    there's a "bug" where the "stable hash" of an AST is just the raw hash value of
    the AST, and this only arises with interpolated nonterminals. The downside of
    this approach, however, is that a bunch of errors get spewed out during
    compilation about how this isn't a great idea.
    
    This PR is focused at fixing these warnings, basically deleting them from the
    compiler. The implementation here is to alter attributes as they're lowered from
    the AST to HIR, expanding all nonterminals in-place as we see them. This code
    for expanding a nonterminal to a token stream already exists for the
    `proc_macro` crate, so we basically just reuse the same implementation there.
    
    After this PR it's considered a bug to have an `Interpolated` token and hence
    the stable hash implementation simply uses `bug!` in this location.
    
    Closes #40946
Commits on Sep 18, 2017
  1. Auto merge of #44680 - infinity0:master, r=Mark-Simulacrum

    bors committed Sep 18, 2017
    rustbuild: with --no-fail-fast, report the specific commands that failed
    
    I'm not sure this is the most elegant way of doing it, I'm still a bit of a rust noob. I tried `Vec<Command>` and keeping `Cell` instead of `RefCell` but couldn't fight my way past the borrow errors, this was the first arrangement that I could make work.
  2. rustbuild: with --no-fail-fast, report the specific commands that failed

    infinity0 committed Sep 18, 2017
  3. Auto merge of #44678 - alexcrichton:rollup, r=alexcrichton

    bors committed Sep 18, 2017
    Rollup of 11 pull requests
    
    - Successful merges: #44364, #44466, #44537, #44548, #44640, #44651, #44657, #44661, #44668, #44671, #44675
    - Failed merges:
  4. Add requested comment

    Xaeroxe committed on GitHub Sep 18, 2017
  5. Rollup merge of #44671 - GuillaumeGomez:run-button, r=steveklabnik

    alexcrichton committed on GitHub Sep 18, 2017
  6. Rollup merge of #44668 - iwillspeak:into-iterator-docs, r=steveklabnik

    alexcrichton committed on GitHub Sep 18, 2017
    Add Example of `IntoIterator` as Trait Bound to Docs
    
    Part of #44600.
  7. Rollup merge of #44661 - GuillaumeGomez:more-links, r=QuietMisdreavus

    alexcrichton committed on GitHub Sep 18, 2017
    Add more links and put the link character to the left
    
    r? @QuietMisdreavus
    
    And of course, a few screenshots:
    
    <img width="1440" alt="screen shot 2017-09-17 at 22 08 46" src="https://user-images.githubusercontent.com/3050060/30524496-44a50208-9bf5-11e7-942e-a3707ba125c3.png">
    <img width="1440" alt="screen shot 2017-09-17 at 22 09 47" src="https://user-images.githubusercontent.com/3050060/30524502-49068dbc-9bf5-11e7-8e59-ec38664e0e0f.png">
    <img width="1440" alt="screen shot 2017-09-17 at 22 10 56" src="https://user-images.githubusercontent.com/3050060/30524503-491c8c34-9bf5-11e7-9ce5-f1bd5ef8600b.png">
  8. Rollup merge of #44657 - Ixrec:patch-1, r=eddyb

    alexcrichton committed on GitHub Sep 18, 2017
    Replace str's transmute() calls with pointer casts
    
    After the following conversation in #rust-lang:
    ```
    [14:43:50] <Ixrec> TIL the implementation of from_utf_unchecked is literally just "mem::transmute(x)"
    [14:43:59] <Ixrec> no wonder people keep saying transmute is overpowered
    [15:15:30] <eddyb> Ixrec: it should be a pointer cast lol
    [15:15:46] <eddyb> unless it doesn't let you
    [16:50:34] <Ixrec> https://play.rust-lang.org/?gist=d1e6b629ad9ec1baf64ce261c63845e6&version=stable seems like it does let me
    [16:52:35] <eddyb> Ixrec: yeah that's the preferred impl
    [16:52:46] <eddyb> Ixrec: it just wasn't in 1.0
    [16:52:50] <eddyb> IIRC
    [16:53:00] <eddyb> (something something fat pointers)
    ```
    Since I already wrote half of the preferred impls in the playground, might as well make an actual PR.
  9. Rollup merge of #44651 - bluss:document-thread-name-no-nuls, r=stevek…

    alexcrichton committed on GitHub Sep 18, 2017
    …labnik
    
    Document thread builder panics for nul bytes in thread names
    
    This seems to have been undocumented. Mention this where the name is set
    (Builder::name) and where the panic could happen (Builder::spawn).
    
    Thread::new is private and I think the builder is the only user where
    this matters. A short comment was added to "document" Thread::new too.
  10. Rollup merge of #44640 - budziq:stabilize_splice, r=dtolnay

    alexcrichton committed on GitHub Sep 18, 2017
    Stabilized vec_splice and modified splice tracking issue
    
    This stabilizes the vec_splice (Vec part of splice RFC)
    Fixes #32310.