1. 12 6月, 2017 9 次提交
    • B
      Auto merge of #42537 - michaelwoerister:tcx-for-dep-node, r=nikomatsakis · 3f8b9369
      bors 提交于
      incr.comp.: Make DepNode `Copy` and valid across compilation sessions
      
      This PR moves `DepNode` to a representation that does not need retracing and thus simplifies comparing dep-graphs from different compilation sessions. The code also gets a lot simpler in many places, since we don't need the generic parameter on `DepNode` anymore.  See https://github.com/rust-lang/rust/issues/42294 for details.
      
      ~~NOTE: Only the last commit of this is new, the rest is already reviewed in https://github.com/rust-lang/rust/pull/42504.~~
      
      This PR is almost done but there are some things I still want to do:
      - [x] Add some module-level documentation to `dep_node.rs`, explaining especially what the `define_dep_nodes!()` macro is about.
      - [x] Do another pass over the dep-graph loading logic. I suspect that we can get rid of building the `edges` map and also use arrays instead of hash maps in some places.
      
      cc @rust-lang/compiler
      r? @nikomatsakis
      3f8b9369
    • 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
    • M
      Add some documentation to the dep_node module. · fdff2d35
      Michael Woerister 提交于
      fdff2d35
    • 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 12 次提交