1. 06 4月, 2017 40 次提交
    • M
      Introduce HashStable trait and base ICH implementations on it. · c47cdc0d
      Michael Woerister 提交于
      This initial commit provides implementations for HIR, MIR, and
      everything that also needs to be supported for those two.
      c47cdc0d
    • B
      Auto merge of #40996 - alexcrichton:update-cargo, r=alexcrichton · 9e84bf80
      bors 提交于
      Update cargo submodule
      
      Pulls in a fix for rust-lang/rust#40956
      9e84bf80
    • B
      Auto merge of #41102 - frewsxcv:rollup, r=frewsxcv · e5e92753
      bors 提交于
      Rollup of 5 pull requests
      
      - Successful merges: #40908, #41011, #41026, #41037, #41050
      - Failed merges:
      e5e92753
    • C
      Rollup merge of #41050 - jseyfried:fix_derive_parsing, r=petrochenkov · 89b364d6
      Corey Farwell 提交于
      macros: fix bug parsing `#[derive]` invocations
      
      Fixes #40962 (introduced in #40346).
      r? @nrc
      89b364d6
    • C
      Rollup merge of #41037 - stjepang:move-libxtest, r=alexcrichton · e4a62109
      Corey Farwell 提交于
      Move libXtest into libX/tests
      
      This change moves:
      
      1. `libcoretest` into `libcore/tests`
      2. `libcollectionstest` into `libcollections/tests`
      
      This is a follow-up to #39561.
      
      r? @alexcrichton
      e4a62109
    • C
      Rollup merge of #41026 - CleanCut:rust-40860, r=alexcrichton · 1a4aab94
      Corey Farwell 提交于
      Handle symlinks in src/bootstrap/clean.rs (mostly) -- resolves #40860.
      
      In response to #40860
      
      The broken condition can be replicated with:
      
      ```shell
      export MYARCH=x86_64-apple-darwin && mkdir -p build/$MYARCH/subdir &&
      touch build/$MYARCH/subdir/file && ln -s build/$MYARCH/subdir/file
      build/$MYARCH/subdir/symlink
      ```
      
      `src/bootstrap/clean.rs` has a custom implementation of removing a tree
      `fn rm_rf` that used `std::path::Path::{is_file, is_dir, exists}` while
      recursively deleting directories and files.  Unfortunately, `Path`'s
      implementation of `is_file()` and `is_dir()` and `exists()` always
      unconditionally follow symlinks, which is the exact opposite of standard
      implementations of deleting file trees.
      
      It appears that this custom implementation is being used to workaround a
      behavior in Windows where the files often get marked as read-only, which
      prevents us from simply using something nice and simple like
      `std::fs::remove_dir_all`, which properly deletes links instead of
      following them.
      
      So it looks like the fix is to use `.symlink_metadata()` to figure out
      whether tree items are files/symlinks/directories.  The one corner case
      this won't cover is if there is a broken symlink in the "root"
      `build/$MYARCH` directory, because those initial entries are run through
      `Path::canonicalize()`, which panics with broken symlinks.  So lets just
      never use symlinks in that one directory. :-)
      1a4aab94
    • C
      Rollup merge of #41011 - CleanCut:bootstrap-help, r=alexcrichton · 083c7a93
      Corey Farwell 提交于
      Overhaul Bootstrap (x.py) Command-Line-Parsing & Help Output
      
      While working on #40417, I got frustrated with the behavior of x.py and the bootstrap binary it wraps, so I decided to do something about it.  This PR should improve documentation, make the command-line-parsing more flexible, and clean up some of the internals.  No command that worked before should stop working.  At least that's the theory. :-)
      
      This should resolve at least #40920 and #38373.
      
      Changes:
      
      - No more manual args manipulation -- getopts used everywhere except the one place it's not possible.  As a result, options can be in any position, now, even before the subcommand.
      - The additional options for test, bench, and dist now appear in the help output.
      - No more single-letter variable bindings used internally for large scopes.
      - Don't output the time measurement when just invoking `x.py` or explicitly passing `-h` or `--help`
      - Logic is now much more linear.  We build strings up, and then print them.
      - Refer to subcommands as subcommands everywhere (some places we were saying "command")
      - Other minor stuff.
      
      @alexcrichton This is my first PR. Do I need to do something specific to request reviewers or anything?
      083c7a93
    • C
      Rollup merge of #40908 - dotdash:pers_lt, r=arielb1 · a97a9d9d
      Corey Farwell 提交于
      Emit proper lifetime start intrinsics for personality slots
      
      We currently only emit a single call to the lifetime start intrinsic
      for the personality slot alloca. This happens because we create that
      call at the time that we create the alloca, instead of creating it each
      time we start using it. Because LLVM usually removes the alloca before
      the lifetime intrinsics are even considered, this didn't cause any
      problems yet, but we should fix this anyway.
      a97a9d9d
    • B
      Auto merge of #40805 - vadimcn:msys-mingw, r=alexcrichton · 1a9b3821
      bors 提交于
      [Windows] Enable building rustc with "pthreads" flavor of mingw.
      
      Tested on mingw-w64 packaged with msys2.
      
      r? @alexcrichton
      
      cc #40123
      1a9b3821
    • B
      Auto merge of #41098 - arielb1:rollup, r=arielb1 · 6cd15a0e
      bors 提交于
      Rollup of 12 pull requests
      
      - Successful merges: #40479, #40561, #40709, #40815, #40909, #40927, #40943, #41015, #41028, #41052, #41054, #41065
      - Failed merges:
      6cd15a0e
    • A
      Rollup merge of #41065 - jorendorff:slice-rsplit-41020, r=alexcrichton · d8b61091
      Ariel Ben-Yehuda 提交于
      [T]::rsplit() and rsplit_mut(), #41020
      d8b61091
    • A
      Rollup merge of #41054 - anatol:master, r=alexcrichton · fa0f1027
      Ariel Ben-Yehuda 提交于
      Replace magic number with readable sig constant
      
      SIG_ERR is defined as 'pub const SIG_ERR: sighandler_t = !0 as sighandler_t;'
      fa0f1027
    • A
      Rollup merge of #41052 - topecongiro:overlapping_inherent_impls, r=estebank · a69fcfae
      Ariel Ben-Yehuda 提交于
      Make 'overlapping_inherent_impls' lint a hard error
      
      This is ought to be implemented in PR #40728. Unfortunately, when I rebased the PR to resolve merge conflict, the "hard error" code disappeared. This PR complements the initial PR.
      
      Now the following rust code gives the following error:
      ```rust
      struct Foo;
      
      impl Foo {
          fn id() {}
      }
      
      impl Foo {
          fn id() {}
      }
      
      fn main() {}
      ```
      ```
      error[E0592]: duplicate definitions with name `id`
       --> /home/topecongiro/test.rs:4:5
        |
      4 |     fn id() {}
        |     ^^^^^^^^^^ duplicate definitions for `id`
      ...
      8 |     fn id() {}
        |     ---------- other definition for `id`
      
      error: aborting due to previous error
      ```
      a69fcfae
    • A
      Rollup merge of #41028 - bluss:rev-rfind, r=alexcrichton · 5e410ba5
      Ariel Ben-Yehuda 提交于
      Let .rev()'s find use the underlying rfind and vice versa
      
      - Connect the plumbing in an obvious way from Rev's find → underlying rfind and vice versa
      - A style change in the provided implementation for Iterator::rfind, using simple next_back when it is enough
      5e410ba5
    • A
      Rollup merge of #41015 - arielb1:new-block-stack, r=alexcrichton · b712950d
      Ariel Ben-Yehuda 提交于
      mark build::cfg::start_new_block as inline(never)
      
      LLVM has a bug - [PR32488](https://bugs.llvm.org//show_bug.cgi?id=32488) - where it fails to deduplicate allocas in some
      circumstances. The function `start_new_block` has allocas totalling 1216
      bytes, and when LLVM inlines several copies of that function into
      the recursive function `expr::into`, that function's stack space usage
      goes into tens of kiBs, causing stack overflows.
      
      Mark `start_new_block` as inline(never) to keep it from being inlined,
      getting stack usage under control.
      
      Fixes #40493.
      Fixes #40573.
      
      r? @EddyB
      b712950d
    • A
      Rollup merge of #40943 - Amanieu:offset_to, r=alexcrichton · 9d074473
      Ariel Ben-Yehuda 提交于
      Add ptr::offset_to
      
      This PR adds a method to calculate the signed distance (in number of elements) between two pointers. The resulting value can then be passed to `offset` to get one pointer from the other. This is similar to pointer subtraction in C/C++.
      
      There are 2 special cases:
      
      - If the distance is not a multiple of the element size then the result is rounded towards zero. (in C/C++ this is UB)
      -  ZST return `None`, while normal types return `Some(isize)`. This forces the user to handle the ZST case in unsafe code. (C/C++ doesn't have ZSTs)
      9d074473
    • A
      Rollup merge of #40927 - stjepang:docs-atomic-overflow-note, r=alexcrichton · fc5ff66b
      Ariel Ben-Yehuda 提交于
      Add a note about overflow for fetch_add/fetch_sub
      
      Fixes #40916
      Fixes #34618
      
      r? @steveklabnik
      fc5ff66b
    • A
      Rollup merge of #40909 - nagisa:fix-vec-placement, r=alexcrichton · 1fdcb795
      Ariel Ben-Yehuda 提交于
      Allow using Vec::<T>::place_back for T: !Clone
      
      The place_back was likely put into block with `T: Clone` bound by mistake.
      1fdcb795
    • A
      Rollup merge of #40815 - estebank:issue-40006, r=GuillaumeGomez · cee05080
      Ariel Ben-Yehuda 提交于
      Identify missing item category in `impl`s
      
      ```rust
      struct S;
      impl S {
          pub hello_method(&self) {
              println!("Hello");
          }
      }
      fn main() { S.hello_method(); }
      ```
      
      ```rust
      error: missing `fn` for method declaration
       --> file.rs:3:4
        |
      3 |     pub hello_method(&self) {
        |        ^ missing `fn`
      ```
      
      Fix #40006. r? @pnkfelix CC @jonathandturner @GuillaumeGomez
      cee05080
    • A
      Rollup merge of #40709 - lifthrasiir:leaner-unicode-debug-str, r=alexcrichton · a1820279
      Ariel Ben-Yehuda 提交于
      Reduce a table used for `Debug` impl of `str`.
      
      This commit shrinks the size of the aforementioned table from 2,102 bytes to 1,197 bytes. This is achieved by an observation that most `u16` entries are common in its upper byte. Specifically:
      
      - `SINGLETONS` now uses two tables, one for (upper byte, lower count) and another for a series of lower bytes. For each upper byte given number of lower bytes are read and compared.
      
      - `NORMAL` now uses a variable length format for the count of "true" codepoints and "false" codepoints (one byte with MSB unset, or two big-endian bytes with the first MSB set).
      
      The code size and relative performance roughly remains same as this commit tries to optimize for both. The new table and algorithm has been verified for the equivalence to older ones.
      
      In my x86-64 macOS laptop with `rustc 1.17.0-nightly (0aeb9c12 2017-03-15)`, `-C opt-level=3 -C lto` gives the following:
      
      * The old routine compiles to 2,102 bytes of data and 416 bytes of code.
      * The new routine compiles to 1,197 bytes of data and 448 bytes of code.
      
      Counting a number of all printable Unicode scalar values (128,003, if you wonder) by filtering `0..0x110000` with `std::char::from_u32` and `is_printable` took 50±7ms for both. This can be surprising as the new routine *has* to do more calculations; this is partly explained by the fact that a linear search of `SINGLETONS` has been replaced by *two* linear searches for upper and lower bytes, which greatly reduces the iteration count.
      a1820279
    • A
      Rollup merge of #40561 - arthurprs:hm-adapt2, r=pczarn · 327b9be9
      Ariel Ben-Yehuda 提交于
      Simplify HashMap Bucket interface
      
      > Simplify HashMap Bucket interface
      >
      > * Store capacity_mask instead of capacity
      > * Move bucket index into RawBucket
      > * Valid bucket index is now always within [0..table_capacity)
      > * Simplify iterators by moving logic into RawBuckets
      > * Clone RawTable using RawBucket
      > * Make retain aware of the number of elements
      
      The idea was to put idx in RawBucket instead of the other Bucket types and simplify next() and prev() as much as possible. The rest was a side-effect of that change, except maybe the last 2.
      
      This change makes iteration and other next/prev() heavy operations noticeably faster. Clone is way faster.
      
      ```
      ➜  hashmap2 git:(adapt) ✗ cargo benchcmp pre:: adp:: bench.txt
       name                        pre:: ns/iter  adp:: ns/iter  diff ns/iter   diff %
       clone_10_000                74,364         39,736              -34,628  -46.57%
       grow_100_000                8,343,553      8,233,785          -109,768   -1.32%
       grow_10_000                 817,825        723,958             -93,867  -11.48%
       grow_big_value_100_000      18,418,979     17,906,186         -512,793   -2.78%
       grow_big_value_10_000       1,219,242      1,103,334          -115,908   -9.51%
       insert_1000                 74,546         58,343              -16,203  -21.74%
       insert_100_000              6,743,770      6,238,017          -505,753   -7.50%
       insert_10_000               798,079        719,123             -78,956   -9.89%
       insert_1_000_000            275,215,605    266,975,875      -8,239,730   -2.99%
       insert_int_bigvalue_10_000  1,517,387      1,419,838           -97,549   -6.43%
       insert_str_10_000           316,179        278,896             -37,283  -11.79%
       insert_string_10_000        770,927        747,449             -23,478   -3.05%
       iter_keys_100_000           386,099        333,104             -52,995  -13.73%
       iterate_100_000             387,320        355,707             -31,613   -8.16%
       lookup_100_000              206,757        193,063             -13,694   -6.62%
       lookup_100_000_unif         219,366        193,180             -26,186  -11.94%
       lookup_1_000_000            206,456        205,716                -740   -0.36%
       lookup_1_000_000_unif       659,934        629,659             -30,275   -4.59%
       lru_sim                     20,194,334     18,442,149       -1,752,185   -8.68%
       merge_shuffle               1,168,044      1,063,055          -104,989   -8.99%
      ```
      
      Note 2: I may have messed up porting the diff, let's see what CI says.
      327b9be9
    • A
      Rollup merge of #40479 - sezaru:master, r=alexcrichton · 540fc2c5
      Ariel Ben-Yehuda 提交于
      Fixes other targets rustlibs installation
      
      When the user select more than one target to generate rustlibs for, rustbuild will only install the host one.
      
      This patch fixes it, more info in https://github.com/rust-lang/rust/issues/39235#issuecomment-285878858
      540fc2c5
    • B
      Auto merge of #40348 - nrc:save-extern-fn, r=eddyb · 91ae22a0
      bors 提交于
      Handle extern functions and statics in save-analysis
      
      r? @EddyB
      91ae22a0
    • B
      Auto merge of #41086 - frewsxcv:rollup, r=frewsxcv · 46f71a03
      bors 提交于
      Rollup of 19 pull requests
      
      - Successful merges: #40608, #40870, #40949, #40977, #40981, #40988, #40992, #40997, #40999, #41007, #41014, #41019, #41035, #41043, #41049, #41062, #41066, #41076, #41085
      - Failed merges:
      46f71a03
    • C
      Rollup merge of #41085 - nagisa:fix-output-properg, r=alexcrichton · 97a1f4b1
      Corey Farwell 提交于
      Properly adjust filenames when multiple emissions
      
      Fixes #40993
      
      Should backport just fine to beta but not sure if we want to do this since this is quite old stable regression.
      97a1f4b1
    • C
      Rollup merge of #41076 - alexcrichton:update-sccache, r=frewsxcv · d0d05f5d
      Corey Farwell 提交于
      travis: Update sccache binaries
      
      I've tracked down what I believe is the last spurious sccache failure on #40240
      to behavior in mio (carllerche/mio#583), and this commit updates the binaries to
      a version which has that fix incorporated.
      d0d05f5d
    • C
      Rollup merge of #41066 - steveklabnik:fix-links, r=frewsxcv · f56b46c0
      Corey Farwell 提交于
      Fix links
      
      part of https://github.com/rust-lang/rust/issues/40912
      
      []\n() is not actually a link.
      
      r? @frewsxcv @GuillaumeGomez
      f56b46c0
    • C
      Rollup merge of #41062 - estebank:private-field, r=arielb1 · 1b6d25b1
      Corey Farwell 提交于
      Do not recommend private fields called as method
      
      ```rust
      error: no method named `dog_age` found for type `animal::Dog` in the current scope
        --> $DIR/private-field.rs:26:23
         |
      26 |     let dog_age = dog.dog_age();
         |                       ^^^^^^^ private field, not a method
      ```
      Fix #27654.
      1b6d25b1
    • C
      Rollup merge of #41049 - GuillaumeGomez:rustdoc-ordered-list, r=frewsxcv · 92875f31
      Corey Farwell 提交于
      Handle ordered lists as well
      
      Part of #40912.
      
      r? @rust-lang/docs
      92875f31
    • C
      Rollup merge of #41043 - GuillaumeGomez:sup_balise, r=steveklabnik · 2213912d
      Corey Farwell 提交于
      Replace ^ with <sup> html balise
      
      r? @steveklabnik
      2213912d
    • C
      Rollup merge of #41035 - jmesmon:revert-bad-raw-fd-impls, r=aturon · 6251e4bb
      Corey Farwell 提交于
      Revert "Implement AsRawFd/IntoRawFd for RawFd"
      
      This reverts commit 2cf686f2 (#40842)
      
      RawFd is a type alias for c_int, which is itself a type alias for i32.
      As a result, adding AsRawFd and IntoRawFd impls for RawFd actually adds
      them for i32.
      
      As a result, the reverted commit makes this valid:
      
      ```
      use std::os::unix::io::AsRawFd;
      
      fn arf<T: AsRawFd>(_: T) {}
      
      fn main() {
          arf(32i32)
      }
      ```
      
      Implimenting AsRawFd and IntoRawFd for i32 breaks the promises of both
      those traits that their methods return a valid RawFd.
      
      r? @aturon
      cc @Mic92 @kamalmarhubi
      6251e4bb
    • C
      Rollup merge of #41019 - mandeep:fix-vec-swapremove-docs, r=BurntSushi · 5935fe47
      Corey Farwell 提交于
      Fixed typo in doc comments for swap_remove
      
      While reading the Vec docs, I came across the docs for swap_remove. I believe there is a typo in the comment and ```return``` should be ```returns```. This PR fixes this issue.
      
      I also feel that the entire doc comment is a bit of a run-on and could be changed to something along the lines of ```Removes an element from anywhere in the vector and returns it. The vector is mutated and the removed element is replaced by the last element of the vector. ```
      
      Thoughts?
      5935fe47
    • C
      Rollup merge of #41014 - SimonSapin:patch-6, r=frewsxcv · 56b68305
      Corey Farwell 提交于
      std::thread docs: fix link to current()
      56b68305
    • C
      Rollup merge of #41007 - pgerber:dir_builder, r=frewsxcv · 263d5a0d
      Corey Farwell 提交于
      Improve documentation for `std::fs::DirBuilder`
      263d5a0d
    • C
      Rollup merge of #40999 - irfanhudda:improve-option-docs, r=steveklabnik · 4ed4c41e
      Corey Farwell 提交于
      Improve option API docs
      
      Associated Issue: #29366
      
      Improve `option` API docs for
      * `IntoIter` struct
      * `Iter` struct
      * `IterMut` struct
      
      r? @steveklabnik
      4ed4c41e
    • C
      Rollup merge of #40997 - donniebishop:from_utf8_linking, r=steveklabnik · 325848ab
      Corey Farwell 提交于
      Added links to types in from_utf8 description
      
      References #29375. Link to types mentioned in the documentation for `from_utf8` (`str`, `&[u8`], etc). Paragraphs were reformatted to keep any one line from being excessively long, but are otherwise unchanged.
      325848ab
    • C
      Rollup merge of #40992 - donniebishop:utf8err_linking, r=alexcrichton · fd474f0b
      Corey Farwell 提交于
      Added links to from_utf8 methods in Utf8Error
      
      Referencing  #29375. Linked the `from_utf8` methods for both `String` and `str` in the description. Also linked the `u8` to its documentation
      fd474f0b
    • C
      Rollup merge of #40988 - eugene-bulkin:ascii-docs, r=frewsxcv · 469fe7a1
      Corey Farwell 提交于
      API Docs: ascii
      
      Add/update docs for the `ascii` module per #29341.
      
      r? @steveklabnik
      469fe7a1
    • C
      Rollup merge of #40981 - Technius:master, r=steveklabnik · b0aefe31
      Corey Farwell 提交于
      Add links and some examples to std::sync::mpsc docs
      
      Addresses part of #29377
      r? @steveklabnik
      
      I took a stab at adding links to the `std::sync::mpsc` docs, and I also wrote a few examples.
      
      Edit: Whoops, typed in `?r` instead of `r?`.
      b0aefe31
    • C
      Rollup merge of #40977 - projektir:BarrierWaitResult_doc, r=steveklabnik · 1a9f415b
      Corey Farwell 提交于
      Updating the description for BarrierWaitResult #29377
      
      Referencing `Barrier`, removing reference to `is_leader`.
      1a9f415b