1. 12 6月, 2017 7 次提交
    • B
      Auto merge of #42572 - ollie27:rustdoc_create_dir_all, r=GuillaumeGomez · 0a5218b5
      bors 提交于
      rustdoc: Use `create_dir_all` to create output directory
      
      Currently rustdoc will fail if passed `-o foo/doc` if the `foo`
      directory doesn't exist.
      
      Also remove unneeded `mkdir` as `create_dir_all` can now handle
      concurrent invocations since #39799.
      0a5218b5
    • B
      Auto merge of #42419 - ucarion:ucarion-explain-rc-arc-abbrev, r=frewsxcv · 54eeef14
      bors 提交于
      Explicate what "Rc" and "Arc" stand for.
      
      A person on the weekly "Easy Questions" Reddit thread [was mystified by what `Arc`/`Rc` means](https://www.reddit.com/r/rust/comments/6dyud9/hey_rustaceans_got_an_easy_question_ask_here/did87ds/). Though this is explained in various places, it's not mentioned in the documentation directly.
      
      This PR adds an explanation of the `Rc`/`Arc` acronyms to their respective documentations. There are two things I'm not sure of:
      
      * Does "Rc" mean "Reference Count**er**" or "Reference Count**ed**"? ~~I went with the former.~~ *Edit:* I've changed this to use the latter alternative.
      * Should this information be spelled out elsewhere, such as in the docs for the `rc` module?
      54eeef14
    • B
      Auto merge of #42585 - GuillaumeGomez:E0609, r=Susurrus · 29ef4121
      bors 提交于
      Add E0609
      
      Part of #42229.
      
      cc @Susurrus
      29ef4121
    • G
      Add E0610 · 2f378947
      Guillaume Gomez 提交于
      2f378947
    • B
      Auto merge of #42155 - seanmonstar:unimplemented, r=sfackler · e2eaef84
      bors 提交于
      core: allow messages in unimplemented!() macro
      
      This makes `unimplemented!()` match `unreachable!()`, allowing a message and possible formatting to be provided to better explain what and/or why something is not implemented.
      
      I've used this myself in hyper for a while, include the type and method name, to better help while prototyping new modules, like `unimplemented!("Conn::poll_complete")`, or `unimplemented!("Conn::poll; state={:?}", state)`.
      e2eaef84
    • G
      Add E0609 · f4dd365b
      Guillaume Gomez 提交于
      f4dd365b
    • B
      Auto merge of #40454 - djzin:fast-swap, r=sfackler · 27650ee8
      bors 提交于
      speed up mem::swap
      
      I would have thought that the mem::swap code didn't need an intermediate variable precisely because the pointers are guaranteed never to alias. And.. it doesn't! It seems that llvm will also auto-vectorize this case for large structs, but alas it doesn't seem to have all the aliasing info it needs and so will add redundant checks (and even not bother with autovectorizing for small types). Looks like a lot of performance could still be gained here, so this might be a good test case for future optimizer improvements.
      
      Here are the current benchmarks for the simd version of mem::swap; the timings are in cycles (code below) measured with 10 iterations. The timings for sizes > 32 which are not a multiple of 8 tend to be ever so slightly faster in the old code, but not always. For large struct sizes (> 1024) the new code shows a marked improvement.
      
      \* = latest commit
      † = subtracted from other measurements
      
      | arr_length	| noop<sup>†</sup>	| rust_stdlib	| simd_u64x4\*	| simd_u64x8
      |------------------|------------|-------------------|-------------------|-------------------
      8|80|90|90|90
      16|72|177|177|177
      24|32|76|76|76
      32|68|188|112|188
      40|32|80|60|80
      48|32|84|56|84
      56|32|108|72|108
      64|32|108|72|76
      72|80|350|220|230
      80|80|350|220|230
      88|80|420|270|270
      96|80|420|270|270
      104|80|500|320|320
      112|80|490|320|320
      120|72|528|342|342
      128|48|360|234|234
      136|72|987|387|387
      144|80|1070|420|420
      152|64|856|376|376
      160|68|804|400|400
      168|80|1060|520|520
      176|80|1070|520|520
      184|32|464|228|228
      192|32|504|228|228
      200|32|440|248|248
      208|72|987|573|573
      216|80|1464|220|220
      224|48|852|450|450
      232|72|1182|666|666
      240|32|428|288|288
      248|32|428|308|308
      256|80|860|770|770
      264|80|1130|820|820
      272|80|1340|820|820
      280|80|1220|870|870
      288|72|1227|804|804
      296|72|1356|849|849
      27650ee8
  2. 11 6月, 2017 3 次提交
    • B
      Auto merge of #42569 - birkenfeld:patch-2, r=frewsxcv · 07a2dd41
      bors 提交于
      Simplify FromIterator example of Result
      
      The previous version may be clearer for newcomers, but this is how you'd write it idiomaticly.
      07a2dd41
    • B
      Auto merge of #42580 - tommyip:import-error, r=petrochenkov · 4bf5c99a
      bors 提交于
      Only emit one error for `use foo::self;`
      
      Currently `use foo::self;` would emit both E0429 and E0432. This commit silence the latter one (assuming `foo` is a valid module).
      
      Fixes #42559
      4bf5c99a
    • B
      Auto merge of #42563 - eddyb:infer, r=nikomatsakis · b7613f82
      bors 提交于
      Disentangle InferCtxt, MemCategorizationContext and ExprUseVisitor.
      
      At some point in the past, `InferCtxt` started being used to replace an old "`Typer`" abstraction, which provided access to `TypeckTables` and had optionally type inference to account for.
      That didn't play so nicely with the `'gcx`/`'tcx` split and I had to introduce `borrowck_fake_infer_ctxt`.
      The situation wasn't great but it wasn't too painful inside `rustc` itself.
      
      Recently I've found that method being used in clippy, which does need EUV (before we make it plausible to run lints on HAIR or MIR), and set out to separate inference from tables, for the sake of lint authors.
      Also fixes #42435 to make it trivial to compute type layout or use EUV from lints.
      
      The remaining uses of `TypeckTables` in `InferCtxt` are for closure kinds and signatures, used in trait selection and projection normalization. The solution there is likely to add them as bounds to `ParamEnv`.
      
      r? @nikomatsakis
      cc @mcarton @llogiq @Manishearth
      b7613f82
  3. 10 6月, 2017 16 次提交
  4. 09 6月, 2017 14 次提交
    • G
      Pretty-printers tests: gdbr -> gdb · d7c0d756
      gentoo90 提交于
      d7c0d756
    • B
      Auto merge of #42507 - ibabushkin:external-span-trans, r=eddyb · 5fe923d4
      bors 提交于
      Fix translation of external spans
      
      Previously, I noticed that spans from external crates don't generate any output. This limitation is problematic if analysis is performed on one or more external crates, as is the case with [rust-semverver](https://github.com/ibabushkin/rust-semverver). This change should address this behaviour, with the potential drawback that a minor performance hit is to be expected, as spans from potentially large crates have to be translated now.
      5fe923d4
    • B
      Auto merge of #42521 - alexcrichton:enosys, r=cuviper · a7ac71b9
      bors 提交于
      std: Handle ENOSYS when calling `pipe2`
      
      Should help fix an accidental regression from #39386.
      a7ac71b9
    • E
    • E
    • E
    • B
      Auto merge of #42504 - michaelwoerister:hash-dep-nodes-prep, r=nikomatsakis · 19193d63
      bors 提交于
      Some preparatory refactorings for hash-based DepNodes
      
      This PR collects some changes that turn out to be necessary for implementing `DepNodes` based on stable hashes (see #42294). The commits are self-contained and mostly straightforward.
      
      The most interesting change here is the introduction of `DefIndices` for things that are not part of the AST: Some pieces of crate metadata now have a `DefIndex` too.
      
      cc @EddyB
      r? @nikomatsakis
      19193d63
    • D
      hack around bug in emscripten · 83f1f118
      Djzin 提交于
      83f1f118
    • S
      6d86f0c0
    • S
      Add ctlz_nonzero & cttz_nonzero intrinsics · 13e24003
      Scott McMurray 提交于
      LLVM currently doesn't remove the "bypass if argument is zero" assembly inside branches where the value is known to be non-zero, pessimizing code that uses uN::leading_zeros
      13e24003
    • F
      Update TRPL link in README.md · 09ac478c
      Fuqiao Xue 提交于
      09ac478c
    • B
      Auto merge of #42027 - mjkillough:typedef_assoc_items, r=QuietMisdreavus · 2416e222
      bors 提交于
      Document direct implementations on type aliases.
      
      This improves #32077, but is not a complete fix.
      
      For a type alias `type NewType = AliasedType`, it will include any `impl NewType` and `impl
      Trait for NewType` blocks in the documentation for `NewType`.
      
      A complete fix would include the implementations from the aliased type in the type alias' documentation, so that users have a complete picture of methods that are available on the alias. However, to do this properly would require a fix for #14072, as the alias may affect the type parameters of the type alias, making the documentation difficult to understand. (That is, for `type Result = std::result::Result<(), ()>` we would ideally show documentation for `impl Result<(), ()>`, rather than generic documentation for `impl<T, E> Result<T, E>`).
      
      I think this improvement is worthwhile, as it exposes implementations which are not currently documented by rustdoc. The documentation for the implementations on the aliased type are still accessible by clicking through to the docs for that type. (Although perhaps it's now less obvious to the user that they should click-through to get there).
      2416e222
    • M
      Document direct implementations on type aliases. · 2da35016
      Michael Killough 提交于
      This improves #32077, but is not a complete fix. For a type alias `type
      NewType = AliasedType`, it will include any `impl NewType` and `impl
      Trait for NewType` blocks in the documentation for `NewType`.
      
      A complete fix would include the implementations from the aliased type
      in the type alias' documentation, so that users have a complete
      picture of methods that are available on the alias. However, to do this
      properly would require a fix for #14072, as the alias may affect the
      type parameters of the type alias, making the documentation difficult to
      understand. (That is, for `type Result = std::result::Result<(), ()>` we
      would ideally show documentation for `impl Result<(), ()>`, rather than
      generic documentation for `impl<T, E> Result<T, E>`).
      
      I think this improvement is worthwhile, as it exposes implementations
      which are not currently documented by rustdoc. The documentation for the
      implementations on the aliased type are still accessible by clicking
      through to the docs for that type. (Although perhaps it's now less
      obvious to the user that they should click-through to get there).
      2da35016
    • B
      Auto merge of #42491 - RalfJung:bootstrap-help, r=alexcrichton · 9454dd5d
      bors 提交于
      bootstrap: improve 'build --help' by explaining what exactly the last example does
      
      I recently found myself confused about what exactly gets built how often when I run which command; I think this would have helped me.
      
      One thing I did not touch, but I feel could also be improved, is the wording just above: "For a quick build with a usable compile, you can pass".  I am not a native speaker, but this sounds odd to me. Do you mean "For a quick build of a usable compiler" (but then it should say where the usable compiler is produced)? Or do you mean "For a quick build testing if the compiler is usable"? I can reword this, but I'd like to make sure I understand the intent of the message.
      
      What about
      ```
          For a quick build of a usable compiler, you can pass:
      
              ./x.py build --stage 1 src/libtest
      
          This will first build everything once (like --stage 0 without further
          arguments would), and then use the compiler built in stage 0 to build
          src/libtest and its dependencies.
          Once this is done, build/$ARCH/stage1 contains a usable compiler.
      ```
      However, I am not sure this is actually true. In particular, why even bother building the libstd in stage 1? AFAIK that ends up in `build/*/stage1-std`, not in `build/*/stage1` (which is filled from `build/*/stage0-*`).
      9454dd5d