Backed out changeset 66d0b0be41ed (bug 1493435) for build plain bustages
authorAndreea Pavel <apavel@mozilla.com>
Sat, 22 Sep 2018 19:40:38 +0300
changeset 493530 10a051fd297c9b023155d60321c16c2f9139eba5
parent 493529 66d0b0be41eda6973fb6edf4f25bbe32856a7dab
child 493544 221c18ebe962f68358b4cba927df9099ea935b40
push id9984
push userffxbld-merge
push dateMon, 15 Oct 2018 21:07:35 +0000
treeherdermozilla-beta@183d27ea8570 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1493435
milestone64.0a1
backs out66d0b0be41eda6973fb6edf4f25bbe32856a7dab
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out changeset 66d0b0be41ed (bug 1493435) for build plain bustages
Cargo.lock
servo/components/fallible/Cargo.toml
servo/components/malloc_size_of/Cargo.toml
servo/components/selectors/Cargo.toml
servo/components/style/Cargo.toml
third_party/rust/smallvec/.cargo-checksum.json
third_party/rust/smallvec/.travis.yml
third_party/rust/smallvec/Cargo.toml
third_party/rust/smallvec/benches/bench.rs
third_party/rust/smallvec/lib.rs
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -472,17 +472,17 @@ dependencies = [
  "cssparser-macros 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "dtoa-short 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "itoa 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "proc-macro2 0.4.9 (registry+https://github.com/rust-lang/crates.io-index)",
  "procedural-masquerade 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "quote 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "syn 0.14.6 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "cssparser-macros"
 version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
@@ -727,17 +727,17 @@ dependencies = [
  "synstructure 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "fallible"
 version = "0.0.1"
 dependencies = [
  "hashglobe 0.1.0",
- "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "fixedbitset"
 version = "0.1.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
@@ -858,17 +858,17 @@ dependencies = [
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "malloc_size_of 0.0.1",
  "nsstring 0.1.0",
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "selectors 0.20.0",
  "servo_arc 0.1.1",
- "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
  "style_traits 0.0.1",
 ]
 
 [[package]]
 name = "gkrust"
 version = "0.1.0"
 dependencies = [
@@ -1249,17 +1249,17 @@ version = "0.0.1"
 dependencies = [
  "app_units 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "cssparser 0.24.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "euclid 0.19.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "hashglobe 0.1.0",
  "selectors 0.20.0",
  "servo_arc 0.1.1",
  "smallbitvec 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "thin-slice 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "malloc_size_of_derive"
 version = "0.0.1"
 dependencies = [
@@ -1593,17 +1593,17 @@ dependencies = [
 
 [[package]]
 name = "parking_lot_core"
 version = "0.2.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "rand 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "winapi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "peeking_take_while"
 version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
@@ -1940,17 +1940,17 @@ dependencies = [
  "cssparser 0.24.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "fxhash 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "matches 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "phf 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "phf_codegen 0.7.21 (registry+https://github.com/rust-lang/crates.io-index)",
  "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "servo_arc 0.1.1",
- "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "thin-slice 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "semver"
 version = "0.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
@@ -2032,17 +2032,17 @@ source = "registry+https://github.com/ru
 
 [[package]]
 name = "smallbitvec"
 version = "2.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 
 [[package]]
 name = "smallvec"
-version = "0.6.5"
+version = "0.6.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 dependencies = [
  "unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
 name = "stable_deref_trait"
 version = "1.0.0"
@@ -2126,17 +2126,17 @@ dependencies = [
  "owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "parking_lot 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "regex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "selectors 0.20.0",
  "servo_arc 0.1.1",
  "smallbitvec 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "style_derive 0.0.1",
  "style_traits 0.0.1",
  "thin-slice 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
  "toml 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "uluru 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
  "unicode-segmentation 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2179,17 +2179,17 @@ dependencies = [
  "geckoservo 0.0.1",
  "libc 0.2.43 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "malloc_size_of 0.0.1",
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "regex 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "selectors 0.20.0",
  "size_of_test 0.0.1",
- "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "style 0.0.1",
  "style_traits 0.0.1",
 ]
 
 [[package]]
 name = "syn"
 version = "0.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2650,17 +2650,17 @@ dependencies = [
  "gleam 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "lazy_static 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
  "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
  "plane-split 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "rayon 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
  "ron 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
  "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)",
- "smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)",
  "thread_profiler 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
  "time 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
  "webrender_api 0.57.2",
 ]
 
 [[package]]
 name = "webrender_api"
 version = "0.57.2"
@@ -3011,17 +3011,17 @@ dependencies = [
 "checksum serde_bytes 0.10.4 (registry+https://github.com/rust-lang/crates.io-index)" = "adb6e51a6b3696b301bc221d785f898b4457c619b51d7ce195a6d20baecb37b3"
 "checksum serde_derive 1.0.66 (git+https://github.com/servo/serde?branch=deserialize_from_enums8)" = "<none>"
 "checksum serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)" = "44dd2cfde475037451fa99b7e5df77aa3cfd1536575fa8e7a538ab36dcde49ae"
 "checksum simd 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ed3686dd9418ebcc3a26a0c0ae56deab0681e53fe899af91f5bbcee667ebffb1"
 "checksum siphasher 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2ffc669b726f2bc9a3bcff66e5e23b56ba6bf70e22a34c3d7b6d0b3450b65b84"
 "checksum slab 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17b4fcaed89ab08ef143da37bc52adbcc04d4a69014f4c1208d6b51f0c47bc23"
 "checksum slab 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5f9776d6b986f77b35c6cf846c11ad986ff128fe0b2b63a3628e3755e8d3102d"
 "checksum smallbitvec 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c63726029f0069f88467873e47f392575f28f9f16b72ac65465263db4b3a13c"
-"checksum smallvec 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d"
+"checksum smallvec 0.6.3 (registry+https://github.com/rust-lang/crates.io-index)" = "26df3bb03ca5eac2e64192b723d51f56c1b1e0860e7c766281f4598f181acdc8"
 "checksum stable_deref_trait 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "15132e0e364248108c5e2c02e3ab539be8d6f5d52a01ca9bbf27ed657316f02b"
 "checksum string 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "00caf261d6f90f588f8450b8e1230fa0d5be49ee6140fdfbcb55335aff350970"
 "checksum string_cache 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "25d70109977172b127fe834e5449e5ab1740b9ba49fa18a2020f509174f25423"
 "checksum string_cache_codegen 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "479cde50c3539481f33906a387f2bd17c8e87cb848c35b6021d41fb81ff9b4d7"
 "checksum string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc"
 "checksum strsim 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694"
 "checksum strsim 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bb4f380125926a99e52bc279241539c018323fab05ad6368b56f93d9369ff550"
 "checksum syn 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "91b52877572087400e83d24b9178488541e3d535259e04ff17a63df1e5ceff59"
--- a/servo/components/fallible/Cargo.toml
+++ b/servo/components/fallible/Cargo.toml
@@ -5,17 +5,17 @@ authors = ["The Servo Project Developers
 license = "MPL-2.0"
 publish = false
 
 [lib]
 name = "fallible"
 path = "lib.rs"
 
 [dependencies]
-smallvec = { version = "0.6", features = ["std", "union"] }
+smallvec = "0.6.2"
 hashglobe = { path = "../hashglobe" }
 
 # This crate effectively does nothing except if the `known_system_malloc`
 # feature is specified.
 #
 # In that case, we actually call the system malloc functions to reserve space,
 # otherwise we just let rust do its thing (aborting on OOM).
 #
--- a/servo/components/malloc_size_of/Cargo.toml
+++ b/servo/components/malloc_size_of/Cargo.toml
@@ -32,16 +32,16 @@ hyper = { version = "0.10", optional = t
 hyper_serde = { version = "0.8", optional = true }
 mozjs = { version = "0.9.0", optional = true }
 selectors = { path = "../selectors" }
 serde = { version = "1.0.27", optional = true }
 serde_bytes = { version = "0.10", optional = true }
 servo_arc = { path = "../servo_arc" }
 servo_channel = { path = "../channel", optional = true }
 smallbitvec = "2.1.0"
-smallvec = { version = "0.6", features = ["std", "union"] }
+smallvec = "0.6"
 string_cache = { version = "0.7", optional = true }
 thin-slice = "0.1.0"
 time = { version = "0.1.17", optional = true }
 url = { version = "1.2", optional = true }
 webrender_api = { git = "https://github.com/servo/webrender", features = ["ipc"], optional = true }
 xml5ever = { version = "0.12", optional = true }
 void = "1.0.2"
--- a/servo/components/selectors/Cargo.toml
+++ b/servo/components/selectors/Cargo.toml
@@ -23,13 +23,13 @@ bench = []
 bitflags = "1.0"
 matches = "0.1"
 cssparser = "0.24.0"
 log = "0.4"
 fxhash = "0.2"
 phf = "0.7.18"
 precomputed-hash = "0.1"
 servo_arc = { version = "0.1", path = "../servo_arc" }
-smallvec = { version = "0.6", features = ["std", "union"] }
+smallvec = "0.6.2"
 thin-slice = "0.1.0"
 
 [build-dependencies]
 phf_codegen = "0.7.18"
--- a/servo/components/style/Cargo.toml
+++ b/servo/components/style/Cargo.toml
@@ -58,17 +58,17 @@ precomputed-hash = "0.1.1"
 rayon = "1"
 selectors = { path = "../selectors" }
 serde = {version = "1.0", optional = true, features = ["derive"]}
 servo_arc = { path = "../servo_arc" }
 servo_atoms = {path = "../atoms", optional = true}
 servo_channel = {path = "../channel", optional = true}
 servo_config = {path = "../config", optional = true}
 smallbitvec = "2.1.1"
-smallvec = { version = "0.6", features = ["std", "union"] }
+smallvec = "0.6.2"
 string_cache = { version = "0.7", optional = true }
 style_derive = {path = "../style_derive"}
 style_traits = {path = "../style_traits"}
 servo_url = {path = "../url", optional = true}
 thin-slice = "0.1.0"
 time = "0.1"
 uluru = "0.2"
 unicode-bidi = "0.3"
--- a/third_party/rust/smallvec/.cargo-checksum.json
+++ b/third_party/rust/smallvec/.cargo-checksum.json
@@ -1,1 +1,1 @@
-{"files":{".travis.yml":"106d159f3fbe3ad49ebc631f9707baedf6adb012e5210443919232db5375fa7b","Cargo.toml":"7d0640e384cf1d81593bd049f6bf5b1dcf129db200f4f21b18c06b6bdb5d67a3","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"0b28172679e0009b655da42797c03fd163a3379d5cfa67ba1f1655e974a2a1a9","README.md":"1bc64a621160a291c86b8770f3eeaa45a31c31d91c2a071f39981c14fdacb035","benches/bench.rs":"9dca7122a3dcb2c099e49807e4d3b8f01d9220e2b3db0a54e9901ee74392866f","lib.rs":"513374844e0fc3bc332f5172de3a604acab160e02f576f7d9eaebe64149588a9"},"package":"153ffa32fd170e9944f7e0838edf824a754ec4c1fc64746fcc9fe1f8fa602e5d"}
\ No newline at end of file
+{"files":{".travis.yml":"1fb562c82e3ba8668667016eb5be043130a943a3e22c2c692dfcefd23bb07028","Cargo.toml":"2f8fa5e2e7894727dab3b256f93c739ee2fdd715cad0ea18b466330325dc6c90","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"0b28172679e0009b655da42797c03fd163a3379d5cfa67ba1f1655e974a2a1a9","README.md":"1bc64a621160a291c86b8770f3eeaa45a31c31d91c2a071f39981c14fdacb035","benches/bench.rs":"bf8c9a06dad072e14e844daf43895c41d632db183f33fa6de53a43d3677a7375","lib.rs":"dd8993f008a5512d33a74d5e141a4d9d6294baa11174bfeeec2251d731d51957"},"package":"26df3bb03ca5eac2e64192b723d51f56c1b1e0860e7c766281f4598f181acdc8"}
\ No newline at end of file
--- a/third_party/rust/smallvec/.travis.yml
+++ b/third_party/rust/smallvec/.travis.yml
@@ -1,16 +1,13 @@
 language: rust
 rust:
-  - 1.20.0
   - nightly
   - beta
   - stable
 script: |
   cargo build --verbose &&
   cargo test --verbose &&
-  cargo test --verbose --features serde &&
   ([ $TRAVIS_RUST_VERSION != nightly ] || cargo check --verbose --no-default-features) &&
   ([ $TRAVIS_RUST_VERSION != nightly ] || cargo test --verbose --features union) &&
-  ([ $TRAVIS_RUST_VERSION != nightly ] || cargo test --verbose --all-features) &&
   ([ $TRAVIS_RUST_VERSION != nightly ] || cargo bench --verbose bench)
 notifications:
   webhooks: http://build.servo.org:54856/travis
--- a/third_party/rust/smallvec/Cargo.toml
+++ b/third_party/rust/smallvec/Cargo.toml
@@ -7,17 +7,17 @@
 #
 # If you believe there's an error in this file please file an
 # issue against the rust-lang/cargo repository. If you're
 # editing this file be aware that the upstream Cargo.toml
 # will likely look very different (and much more reasonable)
 
 [package]
 name = "smallvec"
-version = "0.6.5"
+version = "0.6.3"
 authors = ["Simon Sapin <simon.sapin@exyr.org>"]
 description = "'Small vector' optimization: store up to a small number of items on the stack"
 documentation = "http://doc.servo.org/smallvec/"
 readme = "README.md"
 keywords = ["small", "vec", "vector", "stack", "no_std"]
 categories = ["data-structures"]
 license = "MIT/Apache-2.0"
 repository = "https://github.com/servo/rust-smallvec"
--- a/third_party/rust/smallvec/benches/bench.rs
+++ b/third_party/rust/smallvec/benches/bench.rs
@@ -12,17 +12,16 @@ const SPILLED_SIZE: usize = 100;
 
 trait Vector<T>: for<'a> From<&'a [T]> + Extend<T> + ExtendFromSlice<T> {
     fn new() -> Self;
     fn push(&mut self, val: T);
     fn pop(&mut self) -> Option<T>;
     fn remove(&mut self, p: usize) -> T;
     fn insert(&mut self, n: usize, val: T);
     fn from_elem(val: T, n: usize) -> Self;
-    fn from_elems(val: &[T]) -> Self;
 }
 
 impl<T: Copy> Vector<T> for Vec<T> {
     fn new() -> Self {
         Self::with_capacity(VEC_SIZE)
     }
 
     fn push(&mut self, val: T) {
@@ -39,20 +38,16 @@ impl<T: Copy> Vector<T> for Vec<T> {
 
     fn insert(&mut self, n: usize, val: T) {
         self.insert(n, val)
     }
 
     fn from_elem(val: T, n: usize) -> Self {
         vec![val; n]
     }
-
-    fn from_elems(val: &[T]) -> Self {
-        val.to_owned()
-    }
 }
 
 impl<T: Copy> Vector<T> for SmallVec<[T; VEC_SIZE]> {
     fn new() -> Self {
         Self::new()
     }
 
     fn push(&mut self, val: T) {
@@ -69,20 +64,16 @@ impl<T: Copy> Vector<T> for SmallVec<[T;
 
     fn insert(&mut self, n: usize, val: T) {
         self.insert(n, val)
     }
 
     fn from_elem(val: T, n: usize) -> Self {
         smallvec![val; n]
     }
-
-    fn from_elems(val: &[T]) -> Self {
-        SmallVec::from_slice(val)
-    }
 }
 
 macro_rules! make_benches {
     ($typ:ty { $($b_name:ident => $g_name:ident($($args:expr),*),)* }) => {
         $(
             #[bench]
             fn $b_name(b: &mut Bencher) {
                 $g_name::<$typ>($($args,)* b)
@@ -96,18 +87,16 @@ make_benches! {
         bench_push => gen_push(SPILLED_SIZE as _),
         bench_push_small => gen_push(VEC_SIZE as _),
         bench_insert => gen_insert(SPILLED_SIZE as _),
         bench_insert_small => gen_insert(VEC_SIZE as _),
         bench_remove => gen_remove(SPILLED_SIZE as _),
         bench_remove_small => gen_remove(VEC_SIZE as _),
         bench_extend => gen_extend(SPILLED_SIZE as _),
         bench_extend_small => gen_extend(VEC_SIZE as _),
-        bench_from_iter => gen_from_iter(SPILLED_SIZE as _),
-        bench_from_iter_small => gen_from_iter(VEC_SIZE as _),
         bench_from_slice => gen_from_slice(SPILLED_SIZE as _),
         bench_from_slice_small => gen_from_slice(VEC_SIZE as _),
         bench_extend_from_slice => gen_extend_from_slice(SPILLED_SIZE as _),
         bench_extend_from_slice_small => gen_extend_from_slice(VEC_SIZE as _),
         bench_macro_from_elem => gen_from_elem(SPILLED_SIZE as _),
         bench_macro_from_elem_small => gen_from_elem(VEC_SIZE as _),
         bench_pushpop => gen_pushpop(),
     }
@@ -118,18 +107,16 @@ make_benches! {
         bench_push_vec => gen_push(SPILLED_SIZE as _),
         bench_push_vec_small => gen_push(VEC_SIZE as _),
         bench_insert_vec => gen_insert(SPILLED_SIZE as _),
         bench_insert_vec_small => gen_insert(VEC_SIZE as _),
         bench_remove_vec => gen_remove(SPILLED_SIZE as _),
         bench_remove_vec_small => gen_remove(VEC_SIZE as _),
         bench_extend_vec => gen_extend(SPILLED_SIZE as _),
         bench_extend_vec_small => gen_extend(VEC_SIZE as _),
-        bench_from_iter_vec => gen_from_iter(SPILLED_SIZE as _),
-        bench_from_iter_vec_small => gen_from_iter(VEC_SIZE as _),
         bench_from_slice_vec => gen_from_slice(SPILLED_SIZE as _),
         bench_from_slice_vec_small => gen_from_slice(VEC_SIZE as _),
         bench_extend_from_slice_vec => gen_extend_from_slice(SPILLED_SIZE as _),
         bench_extend_from_slice_vec_small => gen_extend_from_slice(VEC_SIZE as _),
         bench_macro_from_elem_vec => gen_from_elem(SPILLED_SIZE as _),
         bench_macro_from_elem_vec_small => gen_from_elem(VEC_SIZE as _),
         bench_pushpop_vec => gen_pushpop(),
     }
@@ -187,32 +174,24 @@ fn gen_remove<V: Vector<u64>>(n: usize, 
 fn gen_extend<V: Vector<u64>>(n: u64, b: &mut Bencher) {
     b.iter(|| {
         let mut vec = V::new();
         vec.extend(0..n);
         vec
     });
 }
 
-fn gen_from_iter<V: Vector<u64>>(n: u64, b: &mut Bencher) {
+fn gen_from_slice<V: Vector<u64>>(n: u64, b: &mut Bencher) {
     let v: Vec<u64> = (0..n).collect();
     b.iter(|| {
         let vec = V::from(&v);
         vec
     });
 }
 
-fn gen_from_slice<V: Vector<u64>>(n: u64, b: &mut Bencher) {
-    let v: Vec<u64> = (0..n).collect();
-    b.iter(|| {
-        let vec = V::from_elems(&v);
-        vec
-    });
-}
-
 fn gen_extend_from_slice<V: Vector<u64>>(n: u64, b: &mut Bencher) {
     let v: Vec<u64> = (0..n).collect();
     b.iter(|| {
         let mut vec = V::new();
         vec.extend_from_slice(&v);
         vec
     });
 }
--- a/third_party/rust/smallvec/lib.rs
+++ b/third_party/rust/smallvec/lib.rs
@@ -108,30 +108,21 @@ use std::marker::PhantomData;
 /// This will use `clone` to duplicate an expression, so one should be careful
 /// using this with types having a nonstandard `Clone` implementation. For
 /// example, `smallvec![Rc::new(1); 5]` will create a vector of five references
 /// to the same boxed integer value, not five references pointing to independently
 /// boxed integers.
 
 #[macro_export]
 macro_rules! smallvec {
-    // count helper: transform any expression into 1
-    (@one $x:expr) => (1usize);
     ($elem:expr; $n:expr) => ({
-        $crate::SmallVec::from_elem($elem, $n)
+        SmallVec::from_elem($elem, $n)
     });
     ($($x:expr),*$(,)*) => ({
-        let count = 0usize $(+ smallvec!(@one $x))*;
-        let mut vec = $crate::SmallVec::new();
-        if count <= vec.inline_size() {
-            $(vec.push($x);)*
-            vec
-        } else {
-            $crate::SmallVec::from_vec(vec![$($x,)*])
-        }
+        SmallVec::from_slice(&[$($x),*])
     });
 }
 
 /// `panic!()` in debug builds, optimization hint in release.
 #[cfg(not(feature = "union"))]
 macro_rules! debug_unreachable {
     () => { debug_unreachable!("entered unreachable code") };
     ($e:expr) => {
@@ -235,29 +226,43 @@ pub struct Drain<'a, T: 'a> {
     iter: slice::IterMut<'a,T>,
 }
 
 impl<'a, T: 'a> Iterator for Drain<'a,T> {
     type Item = T;
 
     #[inline]
     fn next(&mut self) -> Option<T> {
-        self.iter.next().map(|reference| unsafe { ptr::read(reference) })
+        match self.iter.next() {
+            None => None,
+            Some(reference) => {
+                unsafe {
+                    Some(ptr::read(reference))
+                }
+            }
+        }
     }
 
     #[inline]
     fn size_hint(&self) -> (usize, Option<usize>) {
         self.iter.size_hint()
     }
 }
 
 impl<'a, T: 'a> DoubleEndedIterator for Drain<'a, T> {
     #[inline]
     fn next_back(&mut self) -> Option<T> {
-        self.iter.next_back().map(|reference| unsafe { ptr::read(reference) })
+        match self.iter.next_back() {
+            None => None,
+            Some(reference) => {
+                unsafe {
+                    Some(ptr::read(reference))
+                }
+            }
+        }
     }
 }
 
 impl<'a, T> ExactSizeIterator for Drain<'a, T> { }
 
 impl<'a, T: 'a> Drop for Drain<'a,T> {
     fn drop(&mut self) {
         // Destroy the remaining elements.
@@ -282,18 +287,16 @@ impl<A: Array> SmallVecData<A> {
     unsafe fn inline_mut(&mut self) -> &mut A {
         &mut self.inline
     }
     #[inline]
     fn from_inline(inline: A) -> SmallVecData<A> {
         SmallVecData { inline }
     }
     #[inline]
-    unsafe fn into_inline(self) -> A { self.inline }
-    #[inline]
     unsafe fn heap(&self) -> (*mut A::Item, usize) {
         self.heap
     }
     #[inline]
     unsafe fn heap_mut(&mut self) -> &mut (*mut A::Item, usize) {
         &mut self.heap
     }
     #[inline]
@@ -324,23 +327,16 @@ impl<A: Array> SmallVecData<A> {
             _ => debug_unreachable!(),
         }
     }
     #[inline]
     fn from_inline(inline: A) -> SmallVecData<A> {
         SmallVecData::Inline(ManuallyDrop::new(inline))
     }
     #[inline]
-    unsafe fn into_inline(self) -> A {
-        match self {
-            SmallVecData::Inline(a) => ManuallyDrop::into_inner(a),
-            _ => debug_unreachable!(),
-        }
-    }
-    #[inline]
     unsafe fn heap(&self) -> (*mut A::Item, usize) {
         match *self {
             SmallVecData::Heap(data) => data,
             _ => debug_unreachable!(),
         }
     }
     #[inline]
     unsafe fn heap_mut(&mut self) -> &mut (*mut A::Item, usize) {
@@ -475,57 +471,16 @@ impl<A: Array> SmallVec<A> {
     #[inline]
     pub fn from_buf(buf: A) -> SmallVec<A> {
         SmallVec {
             capacity: A::size(),
             data: SmallVecData::from_inline(buf),
         }
     }
 
-    /// Constructs a new `SmallVec` on the stack from an `A` without
-    /// copying elements. Also sets the length, which must be less or
-    /// equal to the size of `buf`.
-    ///
-    /// ```rust
-    /// use smallvec::SmallVec;
-    ///
-    /// let buf = [1, 2, 3, 4, 5, 0, 0, 0];
-    /// let small_vec: SmallVec<_> = SmallVec::from_buf_and_len(buf, 5);
-    ///
-    /// assert_eq!(&*small_vec, &[1, 2, 3, 4, 5]);
-    /// ```
-    #[inline]
-    pub fn from_buf_and_len(buf: A, len: usize) -> SmallVec<A> {
-        assert!(len <= A::size());
-        unsafe { SmallVec::from_buf_and_len_unchecked(buf, len) }
-    }
-
-    /// Constructs a new `SmallVec` on the stack from an `A` without
-    /// copying elements. Also sets the length. The user is responsible
-    /// for ensuring that `len <= A::size()`.
-    ///
-    /// ```rust
-    /// use smallvec::SmallVec;
-    ///
-    /// let buf = [1, 2, 3, 4, 5, 0, 0, 0];
-    /// let small_vec: SmallVec<_> = unsafe {
-    ///     SmallVec::from_buf_and_len_unchecked(buf, 5)
-    /// };
-    ///
-    /// assert_eq!(&*small_vec, &[1, 2, 3, 4, 5]);
-    /// ```
-    #[inline]
-    pub unsafe fn from_buf_and_len_unchecked(buf: A, len: usize) -> SmallVec<A> {
-        SmallVec {
-            capacity: len,
-            data: SmallVecData::from_inline(buf),
-        }
-    }
-
-
     /// Sets the length of a vector.
     ///
     /// This will explicitly set the size of the vector, without actually
     /// modifying its buffers, so it is up to the caller to ensure that the
     /// vector is actually the specified size.
     pub unsafe fn set_len(&mut self, new_len: usize) {
         let (_, len_ptr, _) = self.triple_mut();
         *len_ptr = new_len;
@@ -605,17 +560,17 @@ impl<A: Array> SmallVec<A> {
     }
 
     /// Append an item to the vector.
     #[inline]
     pub fn push(&mut self, value: A::Item) {
         unsafe {
             let (_, &mut len, cap) = self.triple_mut();
             if len == cap {
-                self.reserve(1);
+                self.grow(cmp::max(cap * 2, 1))
             }
             let (ptr, len_ptr, _) = self.triple_mut();
             *len_ptr = len + 1;
             ptr::write(ptr.offset(len as isize), value);
         }
     }
 
     /// Remove an item from the end of the vector and return it, or None if empty.
@@ -633,47 +588,46 @@ impl<A: Array> SmallVec<A> {
     }
 
     /// Re-allocate to set the capacity to `max(new_cap, inline_size())`.
     ///
     /// Panics if `new_cap` is less than the vector's length.
     pub fn grow(&mut self, new_cap: usize) {
         unsafe {
             let (ptr, &mut len, cap) = self.triple_mut();
-            let unspilled = !self.spilled();
+            let spilled = self.spilled();
             assert!(new_cap >= len);
             if new_cap <= self.inline_size() {
-                if unspilled {
+                if !spilled {
                     return;
                 }
                 self.data = SmallVecData::from_inline(mem::uninitialized());
                 ptr::copy_nonoverlapping(ptr, self.data.inline_mut().ptr_mut(), len);
+                deallocate(ptr, cap);
             } else if new_cap != cap {
                 let mut vec = Vec::with_capacity(new_cap);
                 let new_alloc = vec.as_mut_ptr();
                 mem::forget(vec);
                 ptr::copy_nonoverlapping(ptr, new_alloc, len);
                 self.data = SmallVecData::from_heap(new_alloc, len);
                 self.capacity = new_cap;
-                if unspilled {
-                    return;
+                if spilled {
+                    deallocate(ptr, cap);
                 }
             }
-            deallocate(ptr, cap);
         }
     }
 
     /// Reserve capacity for `additional` more elements to be inserted.
     ///
     /// May reserve more space to avoid frequent reallocations.
     ///
     /// If the new capacity would overflow `usize` then it will be set to `usize::max_value()`
     /// instead. (This means that inserting `additional` new elements is not guaranteed to be
     /// possible after calling this function.)
-    #[inline]
     pub fn reserve(&mut self, additional: usize) {
         // prefer triple_mut() even if triple() would work
         // so that the optimizer removes duplicated calls to it
         // from callers like insert()
         let (_, &mut len, cap) = self.triple_mut();
         if cap - len < additional {
             let new_cap = len.checked_add(additional).
                 and_then(usize::checked_next_power_of_two).
@@ -857,32 +811,16 @@ impl<A: Array> SmallVec<A> {
                 mem::forget(self);
                 v
             }
         } else {
             self.into_iter().collect()
         }
     }
 
-    /// Convert the SmallVec into an `A` if possible. Otherwise return `Err(Self)`.
-    ///
-    /// This method returns `Err(Self)` if the SmallVec is too short (and the `A` contains uninitialized elements),
-    /// or if the SmallVec is too long (and all the elements were spilled to the heap).
-    pub fn into_inner(self) -> Result<A, Self> {
-        if self.spilled() || self.len() != A::size() {
-            Err(self)
-        } else {
-            unsafe {
-                let data = ptr::read(&self.data);
-                mem::forget(self);
-                Ok(data.into_inline())
-            }
-        }
-    }
-
     /// Retains only the elements specified by the predicate.
     ///
     /// In other words, remove all elements `e` such that `f(&e)` returns `false`.
     /// This method operates in place and preserves the order of the retained
     /// elements.
     pub fn retain<F: FnMut(&mut A::Item) -> bool>(&mut self, mut f: F) {
         let mut del = 0;
         let len = self.len();
@@ -941,35 +879,19 @@ impl<A: Array> SmallVec<A> {
     }
 }
 
 impl<A: Array> SmallVec<A> where A::Item: Copy {
     /// Copy the elements from a slice into a new `SmallVec`.
     ///
     /// For slices of `Copy` types, this is more efficient than `SmallVec::from(slice)`.
     pub fn from_slice(slice: &[A::Item]) -> Self {
-        let len = slice.len();
-        if len <= A::size() {
-            SmallVec {
-                capacity: len,
-                data: SmallVecData::from_inline(unsafe {
-                    let mut data: A = mem::uninitialized();
-                    ptr::copy_nonoverlapping(slice.as_ptr(), data.ptr_mut(), len);
-                    data
-                })
-            }
-        } else {
-            let mut b = slice.to_vec();
-            let ptr = b.as_mut_ptr();
-            mem::forget(b);
-            SmallVec {
-                capacity: len,
-                data: SmallVecData::from_heap(ptr, len),
-            }
-        }
+        let mut vec = Self::new();
+        vec.extend_from_slice(slice);
+        vec
     }
 
     /// Copy elements from a slice into the vector at position `index`, shifting any following
     /// elements toward the back.
     ///
     /// For slices of `Copy` types, this is more efficient than `insert`.
     pub fn insert_from_slice(&mut self, index: usize, slice: &[A::Item]) {
         self.reserve(slice.len());
@@ -1248,17 +1170,17 @@ impl<A: Array> Extend<A::Item> for Small
         for elem in iter {
             self.push(elem);
         }
     }
 }
 
 impl<A: Array> fmt::Debug for SmallVec<A> where A::Item: fmt::Debug {
     fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        f.debug_list().entries(self.iter()).finish()
+        write!(f, "{:?}", &**self)
     }
 }
 
 impl<A: Array> Default for SmallVec<A> {
     #[inline]
     fn default() -> SmallVec<A> {
         SmallVec::new()
     }
@@ -1752,17 +1674,16 @@ mod tests {
         for x in 0..4 {
             v.push(x);
         }
         assert_eq!(v.len(), 4);
         v.insert_many(1, MockHintIter{x: [5, 6].iter().cloned(), hint: 1});
         assert_eq!(&v.iter().map(|v| *v).collect::<Vec<_>>(), &[0, 5, 6, 1, 2, 3]);
     }
 
-    #[cfg(feature = "std")]
     #[test]
     // https://github.com/servo/rust-smallvec/issues/96
     fn test_insert_many_panic() {
         struct PanicOnDoubleDrop {
             dropped: Box<bool>
         }
 
         impl Drop for PanicOnDoubleDrop {
@@ -2024,28 +1945,16 @@ mod tests {
         let vec = SmallVec::<[u8; 2]>::from_iter(0..2);
         assert_eq!(vec.into_vec(), vec![0, 1]);
 
         let vec = SmallVec::<[u8; 2]>::from_iter(0..3);
         assert_eq!(vec.into_vec(), vec![0, 1, 2]);
     }
 
     #[test]
-    fn test_into_inner() {
-        let vec = SmallVec::<[u8; 2]>::from_iter(0..2);
-        assert_eq!(vec.into_inner(), Ok([0, 1]));
-
-        let vec = SmallVec::<[u8; 2]>::from_iter(0..1);
-        assert_eq!(vec.clone().into_inner(), Err(vec));
-
-        let vec = SmallVec::<[u8; 2]>::from_iter(0..3);
-        assert_eq!(vec.clone().into_inner(), Err(vec));
-    }
-
-    #[test]
     fn test_from_vec() {
         let vec = vec![];
         let small_vec: SmallVec<[u8; 3]> = SmallVec::from_vec(vec);
         assert_eq!(&*small_vec, &[]);
         drop(small_vec);
 
         let vec = vec![];
         let small_vec: SmallVec<[u8; 1]> = SmallVec::from_vec(vec);
@@ -2156,24 +2065,24 @@ mod tests {
     }
 
     #[cfg(feature = "serde")]
     extern crate bincode;
 
     #[cfg(feature = "serde")]
     #[test]
     fn test_serde() {
-        use self::bincode::{config, deserialize};
+        use self::bincode::{serialize, deserialize, Bounded};
         let mut small_vec: SmallVec<[i32; 2]> = SmallVec::new();
         small_vec.push(1);
-        let encoded = config().limit(100).serialize(&small_vec).unwrap();
+        let encoded = serialize(&small_vec, Bounded(100)).unwrap();
         let decoded: SmallVec<[i32; 2]> = deserialize(&encoded).unwrap();
         assert_eq!(small_vec, decoded);
         small_vec.push(2);
         // Spill the vec
         small_vec.push(3);
         small_vec.push(4);
         // Check again after spilling.
-        let encoded = config().limit(100).serialize(&small_vec).unwrap();
+        let encoded = serialize(&small_vec, Bounded(100)).unwrap();
         let decoded: SmallVec<[i32; 2]> = deserialize(&encoded).unwrap();
         assert_eq!(small_vec, decoded);
     }
 }