summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorhawkeye1164772018-04-10 20:39:23 +0200
committerhawkeye1164772018-04-10 20:39:23 +0200
commita962a5bae1ea32c9ff23e7eca9e70e44b2b4b016 (patch)
treed4328aaccc5cb2c0c67aee40416374546866354f
parent4cdc460221668323d2d690cb9a7aaa515e24ecee (diff)
downloadaur-a962a5bae1ea32c9ff23e7eca9e70e44b2b4b016.tar.gz
Fix Rust issues
-rw-r--r--PKGBUILD13
-rw-r--r--new_rust.patch2336
2 files changed, 2346 insertions, 3 deletions
diff --git a/PKGBUILD b/PKGBUILD
index ba4eef1c6bfd..94da64cb399a 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -43,7 +43,8 @@ source=("git+https://github.com/MrAlex94/Waterfox.git#tag=$pkgver"
0001-Bug-1384062-Make-SystemResourceMonitor.stop-more-res.patch
"mozilla-ucontext-$_patchrev.patch::$_patchurl/mozilla-ucontext.patch"
no-plt.diff
- "unity-menubar-$pkgver.patch::https://bazaar.launchpad.net/~mozillateam/firefox/firefox.xenial/download/1222/unitymenubar.patch-20130215095938-1n6mqqau8tdfqwhg-1/unity-menubar.patch")
+ "unity-menubar-$pkgver.patch::https://bazaar.launchpad.net/~mozillateam/firefox/firefox.xenial/download/1222/unitymenubar.patch-20130215095938-1n6mqqau8tdfqwhg-1/unity-menubar.patch"
+ new_rust.patch)
sha256sums=('SKIP'
'2a17f68e86c2c871a1ff32f0a012c7ad20ac542b935044e5ffd9716874641f4d'
'd86e41d87363656ee62e12543e2f5181aadcff448e406ef3218e91865ae775cd'
@@ -62,7 +63,8 @@ sha256sums=('SKIP'
'aba767995ffb1a55345e30aaba667f43d469e23bd9b1b68263cf71b8118acc96'
'96d9accb74e19f640e356572b3c0914c6be867cbdf351392b0cb5c00161ee012'
'ea8e1b871c0f1dd29cdea1b1a2e7f47bf4713e2ae7b947ec832dba7dfcc67daa'
- '5903f99dce010279e2a2f0e56d98e756c5abf9a57e27df5e2239076038868d3d')
+ '5903f99dce010279e2a2f0e56d98e756c5abf9a57e27df5e2239076038868d3d'
+ '09797b4da7e90a84c61e6f3e5f18d425d060a964607e198a91c3f0b0d9a7a8ca')
prepare() {
mkdir path
@@ -169,11 +171,12 @@ ac_add_options --disable-gamepad
# Enable wanted features
ac_add_options --enable-jemalloc
-ac_add_options --enable-stylo
+ac_add_options --enable-stylo=build
ac_add_options --with-pthreads
ac_add_options --enable-strip
ac_add_options --enable-startup-notification
ac_add_options --enable-release
+ac_add_options --enable-rust-simd # on x86 requires SSE2
ac_add_options --enable-application=browser
ac_add_options --enable-eme=widevine
@@ -194,6 +197,10 @@ END
# https://bugs.archlinux.org/task/52183
msg "Patching for Jack"
patch -Np1 -i ../jack-system-ports.patch
+
+ msg "Patching for new Rust"
+ patch -Np1 -i ../new_rust.patch
+
}
build() {
diff --git a/new_rust.patch b/new_rust.patch
new file mode 100644
index 000000000000..af7118699904
--- /dev/null
+++ b/new_rust.patch
@@ -0,0 +1,2336 @@
+From dbc1a3326b4a69ae1639f8dd93892fe5d45bb18b Mon Sep 17 00:00:00 2001
+From: Manish Goregaokar <manishearth@gmail.com>
+Date: Wed, 2 Aug 2017 11:24:35 -0700
+Subject: [PATCH 01/16] Bug 1386887 - Clean up FFI lifetimes to work on
+ nightly; r=emilio
+
+(cherry picked from commit mozilla/gecko-dev@efbe3a9af876)
+---
+ layout/style/ServoBindingList.h | 4 ++--
+ layout/style/ServoBindingTypes.h | 2 ++
+ layout/style/ServoBindings.h | 4 ++--
+ layout/style/ServoBindings.toml | 4 +++-
+ 4 files changed, 9 insertions(+), 5 deletions(-)
+
+diff --git a/layout/style/ServoBindingList.h b/layout/style/ServoBindingList.h
+index 4d0294a33b28..c8b05858b95c 100644
+--- a/layout/style/ServoBindingList.h
++++ b/layout/style/ServoBindingList.h
+@@ -377,10 +377,10 @@ SERVO_BINDING_FUNC(Servo_DeclarationBlock_HasCSSWideKeyword, bool,
+ nsCSSPropertyID property)
+ // Compose animation value for a given property.
+ // |base_values| is nsRefPtrHashtable<nsUint32HashKey, RawServoAnimationValue>.
+-// We use void* to avoid exposing nsRefPtrHashtable in FFI.
++// We use RawServoAnimationValueTableBorrowed to avoid exposing nsRefPtrHashtable in FFI.
+ SERVO_BINDING_FUNC(Servo_AnimationCompose, void,
+ RawServoAnimationValueMapBorrowedMut animation_values,
+- void* base_values,
++ RawServoAnimationValueTableBorrowed base_values,
+ nsCSSPropertyID property,
+ RawGeckoAnimationPropertySegmentBorrowed animation_segment,
+ RawGeckoAnimationPropertySegmentBorrowed last_segment,
+diff --git a/layout/style/ServoBindingTypes.h b/layout/style/ServoBindingTypes.h
+index aaf4fc27e1b9..69be15ee9f51 100644
+--- a/layout/style/ServoBindingTypes.h
++++ b/layout/style/ServoBindingTypes.h
+@@ -54,6 +54,8 @@ class nsXBLBinding;
+ using mozilla::dom::StyleChildrenIterator;
+ using mozilla::ServoElementSnapshot;
+
++typedef void* RawServoAnimationValueTableBorrowed;
++
+ typedef nsINode RawGeckoNode;
+ typedef mozilla::dom::Element RawGeckoElement;
+ typedef nsIDocument RawGeckoDocument;
+diff --git a/layout/style/ServoBindings.h b/layout/style/ServoBindings.h
+index e29c24d9ade8..6959112ba1e0 100644
+--- a/layout/style/ServoBindings.h
++++ b/layout/style/ServoBindings.h
+@@ -267,9 +267,9 @@ double Gecko_GetPositionInSegment(
+ // Get servo's AnimationValue for |aProperty| from the cached base style
+ // |aBaseStyles|.
+ // |aBaseStyles| is nsRefPtrHashtable<nsUint32HashKey, RawServoAnimationValue>.
+-// We use void* to avoid exposing nsRefPtrHashtable in FFI.
++// We use RawServoAnimationValueTableBorrowed to avoid exposing nsRefPtrHashtable in FFI.
+ RawServoAnimationValueBorrowedOrNull Gecko_AnimationGetBaseStyle(
+- void* aBaseStyles,
++ RawServoAnimationValueTableBorrowed aBaseStyles,
+ nsCSSPropertyID aProperty);
+ void Gecko_StyleTransition_SetUnsupportedProperty(
+ mozilla::StyleTransition* aTransition,
+diff --git a/layout/style/ServoBindings.toml b/layout/style/ServoBindings.toml
+index 5e09c24eb0e3..3841e71b62f3 100644
+--- a/layout/style/ServoBindings.toml
++++ b/layout/style/ServoBindings.toml
+@@ -353,6 +353,7 @@ raw-lines = [
+ "pub type ServoStyleContextBorrowed<'a> = &'a ::properties::ComputedValues;",
+ "pub type ServoStyleContextBorrowedOrNull<'a> = Option<&'a ::properties::ComputedValues>;",
+ "pub type ServoComputedDataBorrowed<'a> = &'a ServoComputedData;",
++ "pub type RawServoAnimationValueTableBorrowed<'a> = &'a ();"
+ ]
+ whitelist-functions = ["Servo_.*", "Gecko_.*"]
+ structs-types = [
+@@ -385,7 +386,7 @@ structs-types = [
+ "RawGeckoPresContext",
+ "RawGeckoPresContextOwned",
+ "RawGeckoStyleAnimationList",
+- "RawGeckoStyleChildrenIteratorBorrowedMut",
++ "RawGeckoStyleChildrenIterator",
+ "RawGeckoServoStyleRuleList",
+ "RawGeckoURLExtraData",
+ "RawGeckoXBLBinding",
+@@ -520,6 +521,7 @@ servo-borrow-types = [
+ "RawGeckoFontFaceRuleList",
+ "RawGeckoServoStyleRuleList",
+ "RawGeckoServoAnimationValueList",
++ "RawGeckoStyleChildrenIterator",
+ ]
+ fixups = [
+ # hack for gecko-owned string
+
+From 60e7663069278431eda0b0f2e9133abf2d3f366c Mon Sep 17 00:00:00 2001
+From: Manish Goregaokar <manishsmail@gmail.com>
+Date: Tue, 1 Aug 2017 12:57:42 -0500
+Subject: [PATCH 02/16] servo: Merge #17934 - Remove doc comment on statement
+ (from Manishearth:doc-comment); r=canaltinova
+
+rustc warns about these now
+
+Source-Repo: https://github.com/servo/servo
+Source-Revision: b49311c65a083a9b8eb03741bf7ea980b64f1e03
+
+(cherry picked from commit mozilla/gecko-dev@4cbdfa028752)
+---
+ servo/components/style/properties/gecko.mako.rs | 2 +-
+ servo/components/style/values/specified/image.rs | 6 +++---
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/servo/components/style/properties/gecko.mako.rs b/servo/components/style/properties/gecko.mako.rs
+index 9a2ab2135fc5..b0d5ef189ce2 100644
+--- a/servo/components/style/properties/gecko.mako.rs
++++ b/servo/components/style/properties/gecko.mako.rs
+@@ -2081,7 +2081,7 @@ fn static_assert() {
+ return (parent_size, parent_unconstrained_size)
+ }
+
+- /// XXXManishearth this should also handle text zoom
++ // XXXManishearth this should also handle text zoom
+ let min = Au(parent.gecko.mScriptMinSize);
+
+ let scale = (parent.gecko.mScriptSizeMultiplier as f32).powi(delta as i32);
+diff --git a/servo/components/style/values/specified/image.rs b/servo/components/style/values/specified/image.rs
+index 37ed00ccf443..687c6f17d432 100644
+--- a/servo/components/style/values/specified/image.rs
++++ b/servo/components/style/values/specified/image.rs
+@@ -686,14 +686,14 @@ impl LineDirection {
+ input.try(|i| {
+ let to_ident = i.try(|i| i.expect_ident_matching("to"));
+ match *compat_mode {
+- /// `to` keyword is mandatory in modern syntax.
++ // `to` keyword is mandatory in modern syntax.
+ CompatMode::Modern => to_ident?,
+ // Fall back to Modern compatibility mode in case there is a `to` keyword.
+ // According to Gecko, `-moz-linear-gradient(to ...)` should serialize like
+ // `linear-gradient(to ...)`.
+ CompatMode::Moz if to_ident.is_ok() => *compat_mode = CompatMode::Modern,
+- /// There is no `to` keyword in webkit prefixed syntax. If it's consumed,
+- /// parsing should throw an error.
++ // There is no `to` keyword in webkit prefixed syntax. If it's consumed,
++ // parsing should throw an error.
+ CompatMode::WebKit if to_ident.is_ok() => {
+ return Err(SelectorParseError::UnexpectedIdent("to".into()).into())
+ },
+
+From a3d9d535dfc95d5958cb1f7de84e886c42f22c41 Mon Sep 17 00:00:00 2001
+From: Manish Goregaokar <manishsmail@gmail.com>
+Date: Thu, 3 Aug 2017 16:27:12 -0500
+Subject: [PATCH 03/16] servo: Merge #17969 - Update stylo code to work on
+ nightly (from Manishearth:rustup); r=emilio
+
+r=emilio https://bugzilla.mozilla.org/show_bug.cgi?id=1386887
+
+Source-Repo: https://github.com/servo/servo
+Source-Revision: 7cee7d7fcc4194e410fa8a308a77d37ac452778a
+
+(cherry picked from commit mozilla/gecko-dev@9f5c1f2e4b5b)
+---
+ servo/components/style/gecko/generated/bindings.rs | 12 +++++++++---
+ servo/components/style/gecko/wrapper.rs | 7 ++++++-
+ servo/ports/geckolib/glue.rs | 3 ++-
+ 3 files changed, 17 insertions(+), 5 deletions(-)
+
+diff --git a/servo/components/style/gecko/generated/bindings.rs b/servo/components/style/gecko/generated/bindings.rs
+index f0078fa23c20..04722fb866bd 100644
+--- a/servo/components/style/gecko/generated/bindings.rs
++++ b/servo/components/style/gecko/generated/bindings.rs
+@@ -8,6 +8,7 @@ type nsAString_internal = nsAString;
+ pub type ServoStyleContextBorrowed<'a> = &'a ::properties::ComputedValues;
+ pub type ServoStyleContextBorrowedOrNull<'a> = Option<&'a ::properties::ComputedValues>;
+ pub type ServoComputedDataBorrowed<'a> = &'a ServoComputedData;
++pub type RawServoAnimationValueTableBorrowed<'a> = &'a ();
+ use gecko_bindings::structs::mozilla::css::GridTemplateAreasValue;
+ use gecko_bindings::structs::mozilla::css::ErrorReporter;
+ use gecko_bindings::structs::mozilla::css::ImageValue;
+@@ -37,7 +38,7 @@ use gecko_bindings::structs::RawServoStyleRule;
+ use gecko_bindings::structs::RawGeckoPresContext;
+ use gecko_bindings::structs::RawGeckoPresContextOwned;
+ use gecko_bindings::structs::RawGeckoStyleAnimationList;
+-use gecko_bindings::structs::RawGeckoStyleChildrenIteratorBorrowedMut;
++use gecko_bindings::structs::RawGeckoStyleChildrenIterator;
+ use gecko_bindings::structs::RawGeckoServoStyleRuleList;
+ use gecko_bindings::structs::RawGeckoURLExtraData;
+ use gecko_bindings::structs::RawGeckoXBLBinding;
+@@ -316,6 +317,10 @@ pub type RawGeckoServoAnimationValueListBorrowed<'a> = &'a RawGeckoServoAnimatio
+ pub type RawGeckoServoAnimationValueListBorrowedOrNull<'a> = Option<&'a RawGeckoServoAnimationValueList>;
+ pub type RawGeckoServoAnimationValueListBorrowedMut<'a> = &'a mut RawGeckoServoAnimationValueList;
+ pub type RawGeckoServoAnimationValueListBorrowedMutOrNull<'a> = Option<&'a mut RawGeckoServoAnimationValueList>;
++pub type RawGeckoStyleChildrenIteratorBorrowed<'a> = &'a RawGeckoStyleChildrenIterator;
++pub type RawGeckoStyleChildrenIteratorBorrowedOrNull<'a> = Option<&'a RawGeckoStyleChildrenIterator>;
++pub type RawGeckoStyleChildrenIteratorBorrowedMut<'a> = &'a mut RawGeckoStyleChildrenIterator;
++pub type RawGeckoStyleChildrenIteratorBorrowedMutOrNull<'a> = Option<&'a mut RawGeckoStyleChildrenIterator>;
+ pub type ServoCssRulesStrong = ::gecko_bindings::sugar::ownership::Strong<ServoCssRules>;
+ pub type ServoCssRulesBorrowed<'a> = &'a ServoCssRules;
+ pub type ServoCssRulesBorrowedOrNull<'a> = Option<&'a ServoCssRules>;
+@@ -836,7 +841,7 @@ extern "C" {
+ }
+ extern "C" {
+ pub fn Gecko_AnimationGetBaseStyle(aBaseStyles:
+- *mut ::std::os::raw::c_void,
++ RawServoAnimationValueTableBorrowed,
+ aProperty: nsCSSPropertyID)
+ -> RawServoAnimationValueBorrowedOrNull;
+ }
+@@ -2588,7 +2593,8 @@ extern "C" {
+ extern "C" {
+ pub fn Servo_AnimationCompose(animation_values:
+ RawServoAnimationValueMapBorrowedMut,
+- base_values: *mut ::std::os::raw::c_void,
++ base_values:
++ RawServoAnimationValueTableBorrowed,
+ property: nsCSSPropertyID,
+ animation_segment:
+ RawGeckoAnimationPropertySegmentBorrowed,
+diff --git a/servo/components/style/gecko/wrapper.rs b/servo/components/style/gecko/wrapper.rs
+index 034dd94590e2..3c61daefe30a 100644
+--- a/servo/components/style/gecko/wrapper.rs
++++ b/servo/components/style/gecko/wrapper.rs
+@@ -386,7 +386,12 @@ impl<'a> Iterator for GeckoChildrenIterator<'a> {
+ curr
+ },
+ GeckoChildrenIterator::GeckoIterator(ref mut it) => unsafe {
+- Gecko_GetNextStyleChild(it).map(GeckoNode)
++ // We do this unsafe lengthening of the lifetime here because
++ // structs::StyleChildrenIterator is actually StyleChildrenIterator<'a>,
++ // however we can't express this easily with bindgen, and it would
++ // introduce functions with two input lifetimes into bindgen,
++ // which would be out of scope for elision.
++ Gecko_GetNextStyleChild(&mut * (it as *mut _)).map(GeckoNode)
+ }
+ }
+ }
+diff --git a/servo/ports/geckolib/glue.rs b/servo/ports/geckolib/glue.rs
+index 977728286fc3..befdda61e0b3 100644
+--- a/servo/ports/geckolib/glue.rs
++++ b/servo/ports/geckolib/glue.rs
+@@ -62,6 +62,7 @@ use style::gecko_bindings::bindings::RawGeckoServoStyleRuleListBorrowedMut;
+ use style::gecko_bindings::bindings::RawServoAnimationValueBorrowed;
+ use style::gecko_bindings::bindings::RawServoAnimationValueMapBorrowedMut;
+ use style::gecko_bindings::bindings::RawServoAnimationValueStrong;
++use style::gecko_bindings::bindings::RawServoAnimationValueTableBorrowed;
+ use style::gecko_bindings::bindings::RawServoStyleRuleBorrowed;
+ use style::gecko_bindings::bindings::ServoStyleContextBorrowedOrNull;
+ use style::gecko_bindings::bindings::nsTArrayBorrowed_uintptr_t;
+@@ -370,7 +371,7 @@ pub extern "C" fn Servo_AnimationValues_ComputeDistance(from: RawServoAnimationV
+
+ #[no_mangle]
+ pub extern "C" fn Servo_AnimationCompose(raw_value_map: RawServoAnimationValueMapBorrowedMut,
+- base_values: *mut ::std::os::raw::c_void,
++ base_values: RawServoAnimationValueTableBorrowed,
+ css_property: nsCSSPropertyID,
+ segment: RawGeckoAnimationPropertySegmentBorrowed,
+ last_segment: RawGeckoAnimationPropertySegmentBorrowed,
+
+From c652ad0fbcb161a8883512c23837f2b5e80b8231 Mon Sep 17 00:00:00 2001
+From: Simon Sapin <simon.sapin@exyr.org>
+Date: Tue, 15 Aug 2017 07:31:04 -0500
+Subject: [PATCH 04/16] servo: Merge #18046 - Upgrade to rustc 1.21.0-nightly
+ (13d94d5fa 2017-08-10) (from servo:rustup); r=emilio
+
+Source-Repo: https://github.com/servo/servo
+Source-Revision: 7d9b82b9efa7b10a2e34d93df5ac535d99518f7a
+
+(cherry picked from commit mozilla/gecko-dev@ea9c8db790e4)
+---
+ servo/Cargo.lock | 6 +++---
+ servo/components/devtools/lib.rs | 2 +-
+ servo/components/layout/animation.rs | 2 +-
+ servo/components/layout/construct.rs | 6 +++---
+ servo/components/layout/display_list_builder.rs | 2 +-
+ servo/components/layout/flex.rs | 6 +++---
+ servo/components/layout/inline.rs | 4 ++--
+ servo/components/layout/sequential.rs | 2 +-
+ servo/components/layout/table_cell.rs | 2 +-
+ servo/components/layout/text.rs | 2 +-
+ servo/components/net/cookie_storage.rs | 2 +-
+ servo/components/profile/heartbeats.rs | 4 ++--
+ servo/components/script/dom/bindings/js.rs | 4 ++--
+ servo/components/script/dom/cssstyledeclaration.rs | 8 ++++----
+ servo/components/script/dom/cssstylerule.rs | 2 +-
+ servo/components/script/dom/document.rs | 12 ++++++------
+ servo/components/script/dom/medialist.rs | 4 ++--
+ servo/components/script/dom/range.rs | 4 ++--
+ .../script/dom/servoparser/async_html.rs | 4 ++--
+ servo/components/script/dom/url.rs | 4 ++--
+ servo/components/script/dom/vrdisplay.rs | 2 +-
+ .../components/script/dom/webglrenderingcontext.rs | 2 +-
+ servo/components/script/dom/xmlhttprequest.rs | 2 +-
+ servo/components/script/lib.rs | 1 -
+ .../script_plugins/unrooted_must_root.rs | 22 +++++++++++++++-------
+ servo/components/selectors/matching.rs | 2 +-
+ servo/components/selectors/parser.rs | 2 +-
+ .../style/invalidation/element/invalidator.rs | 2 +-
+ servo/components/style/matching.rs | 2 +-
+ .../components/style/properties/properties.mako.rs | 2 +-
+ servo/components/style/style_adjuster.rs | 2 +-
+ servo/components/style/style_resolver.rs | 2 +-
+ servo/components/style/stylesheets/rule_list.rs | 2 +-
+ servo/components/style/stylesheets/rule_parser.rs | 2 +-
+ .../components/style/stylesheets/rules_iterator.rs | 2 +-
+ servo/components/webdriver_server/lib.rs | 2 +-
+ servo/rust-commit-hash | 2 +-
+ servo/tests/unit/style/stylist.rs | 13 -------------
+ 38 files changed, 71 insertions(+), 77 deletions(-)
+
+diff --git a/servo/Cargo.lock b/servo/Cargo.lock
+index 50dd6e1a785a..2aa7bd8ea3dd 100644
+--- a/servo/Cargo.lock
++++ b/servo/Cargo.lock
+@@ -3577,7 +3577,7 @@ version = "0.1.4"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ dependencies = [
+ "error-chain 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
+- "xcb 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
++ "xcb 0.7.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ ]
+
+ [[package]]
+@@ -3592,7 +3592,7 @@ dependencies = [
+
+ [[package]]
+ name = "xcb"
+-version = "0.7.6"
++version = "0.7.7"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ dependencies = [
+ "libc 0.2.23 (registry+https://github.com/rust-lang/crates.io-index)",
+@@ -3918,7 +3918,7 @@ dependencies = [
+ "checksum x11 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db27c597c187da52194a4b8232e7d869503911aab9ff726fefb76d7a830f78ed"
+ "checksum x11-clipboard 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "731230b8edcbb9d99247105e4c9ec0a538594d50ad68d2afa8662195f9db2973"
+ "checksum x11-dl 2.14.0 (registry+https://github.com/rust-lang/crates.io-index)" = "326c500cdc166fd7c70dd8c8a829cd5c0ce7be5a5d98c25817de2b9bdc67faf8"
+-"checksum xcb 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "63e3a849b73e4e1905e4f4d48f1750429bc86ea9f473632ab382a6f69ecb6b33"
++"checksum xcb 0.7.7 (registry+https://github.com/rust-lang/crates.io-index)" = "7cede38417fcdf2f0a9d8abf1cea1c1b066320a8a316e9583a0d717c334fafb2"
+ "checksum xdg 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a66b7c2281ebde13cf4391d70d4c7e5946c3c25e72a7b859ca8f677dcd0b0c61"
+ "checksum xi-unicode 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "12ea8eda4b1eb72f02d148402e23832d56a33f55d8c1b2d5bcdde91d79d47cb1"
+ "checksum xml-rs 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7ec6c39eaa68382c8e31e35239402c0a9489d4141a8ceb0c716099a0b515b562"
+diff --git a/servo/components/devtools/lib.rs b/servo/components/devtools/lib.rs
+index d5a2764a7102..6a25696eaed7 100644
+--- a/servo/components/devtools/lib.rs
++++ b/servo/components/devtools/lib.rs
+@@ -306,7 +306,7 @@ fn run_server(sender: Sender<DevtoolsControlMsg>,
+ columnNumber: console_message.columnNumber,
+ },
+ };
+- for mut stream in &mut *console_actor.streams.borrow_mut() {
++ for stream in &mut *console_actor.streams.borrow_mut() {
+ stream.write_json_packet(&msg);
+ }
+ }
+diff --git a/servo/components/layout/animation.rs b/servo/components/layout/animation.rs
+index e4a2782c1271..ebbba82fcc6a 100644
+--- a/servo/components/layout/animation.rs
++++ b/servo/components/layout/animation.rs
+@@ -39,7 +39,7 @@ pub fn update_animation_state(constellation_chan: &IpcSender<ConstellationMsg>,
+ // run.
+ if let Some(ref mut animations) = running_animations.get_mut(node) {
+ // TODO: This being linear is probably not optimal.
+- for mut anim in animations.iter_mut() {
++ for anim in animations.iter_mut() {
+ if let Animation::Keyframes(_, ref anim_name, ref mut anim_state) = *anim {
+ if *name == *anim_name {
+ debug!("update_animation_state: Found other animation {}", name);
+diff --git a/servo/components/layout/construct.rs b/servo/components/layout/construct.rs
+index c863219941e4..7ef391b42183 100644
+--- a/servo/components/layout/construct.rs
++++ b/servo/components/layout/construct.rs
+@@ -1921,7 +1921,7 @@ impl Legalizer {
+ /// true for anonymous block children of flex flows.
+ fn try_to_add_child(&mut self, context: &SharedStyleContext, parent: &mut FlowRef, child: &mut FlowRef)
+ -> bool {
+- let mut parent = self.stack.last_mut().unwrap_or(parent);
++ let parent = self.stack.last_mut().unwrap_or(parent);
+ let (parent_class, child_class) = (parent.class(), child.class());
+ match (parent_class, child_class) {
+ (FlowClass::TableWrapper, FlowClass::Table) |
+@@ -1962,7 +1962,7 @@ impl Legalizer {
+ } else {
+ IS_BLOCK_FLEX_ITEM
+ };
+- let mut block = FlowRef::deref_mut(&mut block_wrapper).as_mut_block();
++ let block = FlowRef::deref_mut(&mut block_wrapper).as_mut_block();
+ block.base.flags.insert(MARGINS_CANNOT_COLLAPSE);
+ block.fragment.flags.insert(flag);
+ }
+@@ -1979,7 +1979,7 @@ impl Legalizer {
+ } else {
+ IS_BLOCK_FLEX_ITEM
+ };
+- let mut block = FlowRef::deref_mut(child).as_mut_block();
++ let block = FlowRef::deref_mut(child).as_mut_block();
+ block.base.flags.insert(MARGINS_CANNOT_COLLAPSE);
+ block.fragment.flags.insert(flag);
+ }
+diff --git a/servo/components/layout/display_list_builder.rs b/servo/components/layout/display_list_builder.rs
+index f8b26899b57d..783574afd2a3 100644
+--- a/servo/components/layout/display_list_builder.rs
++++ b/servo/components/layout/display_list_builder.rs
+@@ -2718,7 +2718,7 @@ impl InlineFlowDisplayListBuilding for InlineFlow {
+ self.base.scroll_root_id = Some(state.current_scroll_root_id);
+ self.base.clip = state.clip_stack.last().cloned().unwrap_or_else(max_rect);
+
+- for mut fragment in self.fragments.fragments.iter_mut() {
++ for fragment in self.fragments.fragments.iter_mut() {
+ let previous_containing_block_scroll_root_id = state.containing_block_scroll_root_id;
+ if establishes_containing_block_for_absolute(fragment.style.get_box().position) {
+ state.containing_block_scroll_root_id = state.current_scroll_root_id;
+diff --git a/servo/components/layout/flex.rs b/servo/components/layout/flex.rs
+index 353c939f58b9..d79580f8cd0d 100644
+--- a/servo/components/layout/flex.rs
++++ b/servo/components/layout/flex.rs
+@@ -415,7 +415,7 @@ impl FlexFlow {
+
+ let items = &mut self.items[start..];
+ let mut children = self.block_flow.base.children.random_access_mut();
+- for mut item in items {
++ for item in items {
+ let kid = children.get(item.index);
+ item.init_sizes(kid, container_size, self.main_mode);
+ let outer_main_size = item.outer_main_size(kid, self.main_mode);
+@@ -607,7 +607,7 @@ impl FlexFlow {
+
+ let mut children = self.block_flow.base.children.random_access_mut();
+ for item in items.iter_mut() {
+- let mut block = children.get(item.index).as_mut_block();
++ let block = children.get(item.index).as_mut_block();
+
+ block.base.block_container_writing_mode = container_mode;
+ block.base.block_container_inline_size = inline_size;
+@@ -659,7 +659,7 @@ impl FlexFlow {
+
+ let mut children = self.block_flow.base.children.random_access_mut();
+ for item in &mut self.items {
+- let mut base = flow::mut_base(children.get(item.index));
++ let base = flow::mut_base(children.get(item.index));
+ if !self.main_reverse {
+ base.position.start.b = cur_b;
+ cur_b = cur_b + base.position.size.block;
+diff --git a/servo/components/layout/inline.rs b/servo/components/layout/inline.rs
+index d5813d9bea22..10e091c3c66d 100644
+--- a/servo/components/layout/inline.rs
++++ b/servo/components/layout/inline.rs
+@@ -435,7 +435,7 @@ impl LineBreaker {
+ return
+ }
+ let last_fragment_index = self.pending_line.range.end() - FragmentIndex(1);
+- let mut fragment = &mut self.new_fragments[last_fragment_index.get() as usize];
++ let fragment = &mut self.new_fragments[last_fragment_index.get() as usize];
+
+ let old_fragment_inline_size = fragment.border_box.size.inline;
+
+@@ -1047,7 +1047,7 @@ impl InlineFlow {
+ let space_per_expansion_opportunity = slack_inline_size / expansion_opportunities as i32;
+ for fragment_index in line.range.each_index() {
+ let fragment = fragments.get_mut(fragment_index.to_usize());
+- let mut scanned_text_fragment_info = match fragment.specific {
++ let scanned_text_fragment_info = match fragment.specific {
+ SpecificFragmentInfo::ScannedText(ref mut info) if !info.range.is_empty() => info,
+ _ => continue
+ };
+diff --git a/servo/components/layout/sequential.rs b/servo/components/layout/sequential.rs
+index f6f8ce429e4f..4986ebb6c852 100644
+--- a/servo/components/layout/sequential.rs
++++ b/servo/components/layout/sequential.rs
+@@ -133,7 +133,7 @@ pub fn store_overflow(layout_context: &LayoutContext, flow: &mut Flow) {
+ return;
+ }
+
+- for mut kid in flow::mut_base(flow).child_iter_mut() {
++ for kid in flow::mut_base(flow).child_iter_mut() {
+ store_overflow(layout_context, kid);
+ }
+
+diff --git a/servo/components/layout/table_cell.rs b/servo/components/layout/table_cell.rs
+index 7ef02e28db65..fd807989b463 100644
+--- a/servo/components/layout/table_cell.rs
++++ b/servo/components/layout/table_cell.rs
+@@ -136,7 +136,7 @@ impl TableCellFlow {
+ }
+
+ for kid in flow::mut_base(self).children.iter_mut() {
+- let mut kid_base = flow::mut_base(kid);
++ let kid_base = flow::mut_base(kid);
+ if !kid_base.flags.contains(IS_ABSOLUTELY_POSITIONED) {
+ kid_base.position.start.b += offset
+ }
+diff --git a/servo/components/layout/text.rs b/servo/components/layout/text.rs
+index 6e1c7b2a43a1..9a207a2bb84e 100644
+--- a/servo/components/layout/text.rs
++++ b/servo/components/layout/text.rs
+@@ -460,7 +460,7 @@ fn split_first_fragment_at_newline_if_necessary(fragments: &mut LinkedList<Fragm
+ }
+
+ let new_fragment = {
+- let mut first_fragment = fragments.front_mut().unwrap();
++ let first_fragment = fragments.front_mut().unwrap();
+ let string_before;
+ let selection_before;
+ {
+diff --git a/servo/components/net/cookie_storage.rs b/servo/components/net/cookie_storage.rs
+index f255f57b56d2..b3147ef4dd32 100644
+--- a/servo/components/net/cookie_storage.rs
++++ b/servo/components/net/cookie_storage.rs
+@@ -103,7 +103,7 @@ impl CookieStorage {
+
+ // Step 12
+ let domain = reg_host(&cookie.cookie.domain().as_ref().unwrap_or(&""));
+- let mut cookies = self.cookies_map.entry(domain).or_insert(vec![]);
++ let cookies = self.cookies_map.entry(domain).or_insert(vec![]);
+
+ if cookies.len() == self.max_per_host {
+ let old_len = cookies.len();
+diff --git a/servo/components/profile/heartbeats.rs b/servo/components/profile/heartbeats.rs
+index 4661dad61836..0d474fe3a111 100644
+--- a/servo/components/profile/heartbeats.rs
++++ b/servo/components/profile/heartbeats.rs
+@@ -33,7 +33,7 @@ pub fn cleanup() {
+ )
+ );
+ if let Some(mut hbs) = hbs_opt_box {
+- for (_, mut v) in hbs.iter_mut() {
++ for (_, v) in hbs.iter_mut() {
+ // log any remaining heartbeat records before dropping
+ log_heartbeat_records(v);
+ }
+@@ -65,7 +65,7 @@ pub fn maybe_heartbeat(category: &ProfilerCategory,
+ if !(*hbs_ptr).contains_key(category) {
+ maybe_create_heartbeat(&mut (*hbs_ptr), category.clone());
+ }
+- if let Some(mut h) = (*hbs_ptr).get_mut(category) {
++ if let Some(h) = (*hbs_ptr).get_mut(category) {
+ (*h).heartbeat(0, 1, start_time, end_time, start_energy, end_energy);
+ }
+ }
+diff --git a/servo/components/script/dom/bindings/js.rs b/servo/components/script/dom/bindings/js.rs
+index 975ddeda13b0..abfd9f47eff1 100644
+--- a/servo/components/script/dom/bindings/js.rs
++++ b/servo/components/script/dom/bindings/js.rs
+@@ -469,7 +469,7 @@ impl RootCollection {
+ /// Start tracking a stack-based root
+ unsafe fn root(&self, untracked_reflector: *const Reflector) {
+ debug_assert!(thread_state::get().is_script());
+- let mut roots = &mut *self.roots.get();
++ let roots = &mut *self.roots.get();
+ roots.push(untracked_reflector);
+ assert!(!(*untracked_reflector).get_jsobject().is_null())
+ }
+@@ -479,7 +479,7 @@ impl RootCollection {
+ assert!(!tracked_reflector.is_null());
+ assert!(!(*tracked_reflector).get_jsobject().is_null());
+ debug_assert!(thread_state::get().is_script());
+- let mut roots = &mut *self.roots.get();
++ let roots = &mut *self.roots.get();
+ match roots.iter().rposition(|r| *r == tracked_reflector) {
+ Some(idx) => {
+ roots.remove(idx);
+diff --git a/servo/components/script/dom/cssstyledeclaration.rs b/servo/components/script/dom/cssstyledeclaration.rs
+index 0732c9af9e45..ddf085b34913 100644
+--- a/servo/components/script/dom/cssstyledeclaration.rs
++++ b/servo/components/script/dom/cssstyledeclaration.rs
+@@ -238,7 +238,7 @@ impl CSSStyleDeclaration {
+ return Err(Error::NoModificationAllowed);
+ }
+
+- self.owner.mutate_associated_block(|ref mut pdb, mut changed| {
++ self.owner.mutate_associated_block(|pdb, changed| {
+ if value.is_empty() {
+ // Step 3
+ *changed = pdb.remove_property(&id);
+@@ -360,7 +360,7 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
+ _ => return Ok(()),
+ };
+
+- self.owner.mutate_associated_block(|ref mut pdb, mut changed| {
++ self.owner.mutate_associated_block(|pdb, changed| {
+ // Step 5 & 6
+ *changed = pdb.set_importance(&id, importance);
+ });
+@@ -388,7 +388,7 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
+ };
+
+ let mut string = String::new();
+- self.owner.mutate_associated_block(|mut pdb, mut changed| {
++ self.owner.mutate_associated_block(|pdb, changed| {
+ pdb.property_value_to_css(&id, &mut string).unwrap();
+ *changed = pdb.remove_property(&id);
+ });
+@@ -438,7 +438,7 @@ impl CSSStyleDeclarationMethods for CSSStyleDeclaration {
+ }
+
+ let quirks_mode = window.Document().quirks_mode();
+- self.owner.mutate_associated_block(|mut pdb, mut _changed| {
++ self.owner.mutate_associated_block(|pdb, _changed| {
+ // Step 3
+ *pdb = parse_style_attribute(&value,
+ &self.owner.base_url(),
+diff --git a/servo/components/script/dom/cssstylerule.rs b/servo/components/script/dom/cssstylerule.rs
+index ea121ef900a9..12e9cdcc8694 100644
+--- a/servo/components/script/dom/cssstylerule.rs
++++ b/servo/components/script/dom/cssstylerule.rs
+@@ -99,7 +99,7 @@ impl CSSStyleRuleMethods for CSSStyleRule {
+ if let Ok(mut s) = SelectorList::parse(&parser, &mut css_parser) {
+ // This mirrors what we do in CSSStyleOwner::mutate_associated_block.
+ let mut guard = self.cssrule.shared_lock().write();
+- let mut stylerule = self.stylerule.write_with(&mut guard);
++ let stylerule = self.stylerule.write_with(&mut guard);
+ mem::swap(&mut stylerule.selectors, &mut s);
+ // It seems like we will want to avoid having to invalidate all
+ // stylesheets eventually!
+diff --git a/servo/components/script/dom/document.rs b/servo/components/script/dom/document.rs
+index 90ea06fbe7b4..71bb02eaa364 100644
+--- a/servo/components/script/dom/document.rs
++++ b/servo/components/script/dom/document.rs
+@@ -633,7 +633,7 @@ impl Document {
+ // reset_form_owner_for_listeners -> reset_form_owner -> GetElementById
+ {
+ let mut id_map = self.id_map.borrow_mut();
+- let mut elements = id_map.entry(id.clone()).or_insert(Vec::new());
++ let elements = id_map.entry(id.clone()).or_insert(Vec::new());
+ elements.insert_pre_order(element, root.r().upcast::<Node>());
+ }
+ self.reset_form_owner_for_listeners(&id);
+@@ -642,7 +642,7 @@ impl Document {
+ pub fn register_form_id_listener<T: ?Sized + FormControl>(&self, id: DOMString, listener: &T) {
+ let mut map = self.form_id_listener_map.borrow_mut();
+ let listener = listener.to_element();
+- let mut set = map.entry(Atom::from(id)).or_insert(HashSet::new());
++ let set = map.entry(Atom::from(id)).or_insert(HashSet::new());
+ set.insert(JS::from_ref(listener));
+ }
+
+@@ -1572,7 +1572,7 @@ impl Document {
+ /// https://html.spec.whatwg.org/multipage/#dom-window-cancelanimationframe
+ pub fn cancel_animation_frame(&self, ident: u32) {
+ let mut list = self.animation_frame_list.borrow_mut();
+- if let Some(mut pair) = list.iter_mut().find(|pair| pair.0 == ident) {
++ if let Some(pair) = list.iter_mut().find(|pair| pair.0 == ident) {
+ pair.1 = None;
+ }
+ }
+@@ -2399,7 +2399,7 @@ impl Document {
+ if entry.snapshot.is_none() {
+ entry.snapshot = Some(Snapshot::new(el.html_element_in_html_document()));
+ }
+- let mut snapshot = entry.snapshot.as_mut().unwrap();
++ let snapshot = entry.snapshot.as_mut().unwrap();
+ if snapshot.state.is_none() {
+ snapshot.state = Some(el.state());
+ }
+@@ -2426,7 +2426,7 @@ impl Document {
+ entry.hint.insert(RESTYLE_SELF);
+ }
+
+- let mut snapshot = entry.snapshot.as_mut().unwrap();
++ let snapshot = entry.snapshot.as_mut().unwrap();
+ if attr.local_name() == &local_name!("id") {
+ snapshot.id_changed = true;
+ } else if attr.local_name() == &local_name!("class") {
+@@ -4028,7 +4028,7 @@ impl PendingInOrderScriptVec {
+
+ fn loaded(&self, element: &HTMLScriptElement, result: ScriptResult) {
+ let mut scripts = self.scripts.borrow_mut();
+- let mut entry = scripts.iter_mut().find(|entry| &*entry.element == element).unwrap();
++ let entry = scripts.iter_mut().find(|entry| &*entry.element == element).unwrap();
+ entry.loaded(result);
+ }
+
+diff --git a/servo/components/script/dom/medialist.rs b/servo/components/script/dom/medialist.rs
+index 0064d0445095..ae20f5aa0422 100644
+--- a/servo/components/script/dom/medialist.rs
++++ b/servo/components/script/dom/medialist.rs
+@@ -63,7 +63,7 @@ impl MediaListMethods for MediaList {
+ // https://drafts.csswg.org/cssom/#dom-medialist-mediatext
+ fn SetMediaText(&self, value: DOMString) {
+ let mut guard = self.shared_lock().write();
+- let mut media_queries = self.media_queries.write_with(&mut guard);
++ let media_queries = self.media_queries.write_with(&mut guard);
+ // Step 2
+ if value.is_empty() {
+ // Step 1
+@@ -154,7 +154,7 @@ impl MediaListMethods for MediaList {
+ // Step 3
+ let m_serialized = m.unwrap().to_css_string();
+ let mut guard = self.shared_lock().write();
+- let mut media_list = self.media_queries.write_with(&mut guard);
++ let media_list = self.media_queries.write_with(&mut guard);
+ let new_vec = media_list.media_queries.drain(..)
+ .filter(|q| m_serialized != q.to_css_string())
+ .collect();
+diff --git a/servo/components/script/dom/range.rs b/servo/components/script/dom/range.rs
+index fa849a0fc1a2..1e65caedc9dd 100644
+--- a/servo/components/script/dom/range.rs
++++ b/servo/components/script/dom/range.rs
+@@ -1049,7 +1049,7 @@ impl WeakRangeVec {
+ let offset = context.index();
+ let parent = context.parent;
+ unsafe {
+- let mut ranges = &mut *self.cell.get();
++ let ranges = &mut *self.cell.get();
+
+ ranges.update(|entry| {
+ let range = entry.root().unwrap();
+@@ -1076,7 +1076,7 @@ impl WeakRangeVec {
+ }
+
+ unsafe {
+- let mut ranges = &mut *self.cell.get();
++ let ranges = &mut *self.cell.get();
+
+ ranges.update(|entry| {
+ let range = entry.root().unwrap();
+diff --git a/servo/components/script/dom/servoparser/async_html.rs b/servo/components/script/dom/servoparser/async_html.rs
+index 59411fda1c73..70d2008f49f6 100644
+--- a/servo/components/script/dom/servoparser/async_html.rs
++++ b/servo/components/script/dom/servoparser/async_html.rs
+@@ -568,7 +568,7 @@ impl TreeSink for Sink {
+ }
+ let node = self.new_parse_node();
+ {
+- let mut data = self.get_parse_node_data_mut(&target.id);
++ let data = self.get_parse_node_data_mut(&target.id);
+ data.contents = Some(node.clone());
+ }
+ self.send_op(ParseOperation::GetTemplateContents { target: target.id, contents: node.id });
+@@ -596,7 +596,7 @@ impl TreeSink for Sink {
+ let mut node = self.new_parse_node();
+ node.qual_name = Some(name.clone());
+ {
+- let mut node_data = self.get_parse_node_data_mut(&node.id);
++ let node_data = self.get_parse_node_data_mut(&node.id);
+ node_data.is_integration_point = html_attrs.iter()
+ .any(|attr| {
+ let attr_value = &String::from(attr.value.clone());
+diff --git a/servo/components/script/dom/url.rs b/servo/components/script/dom/url.rs
+index a02a735638fc..41de4dcc0c72 100644
+--- a/servo/components/script/dom/url.rs
++++ b/servo/components/script/dom/url.rs
+@@ -96,8 +96,8 @@ impl URL {
+
+ // https://w3c.github.io/FileAPI/#dfn-createObjectURL
+ pub fn CreateObjectURL(global: &GlobalScope, blob: &Blob) -> DOMString {
+- /// XXX: Second field is an unicode-serialized Origin, it is a temporary workaround
+- /// and should not be trusted. See issue https://github.com/servo/servo/issues/11722
++ // XXX: Second field is an unicode-serialized Origin, it is a temporary workaround
++ // and should not be trusted. See issue https://github.com/servo/servo/issues/11722
+ let origin = get_blob_origin(&global.get_url());
+
+ let id = blob.get_blob_url_id();
+diff --git a/servo/components/script/dom/vrdisplay.rs b/servo/components/script/dom/vrdisplay.rs
+index 3f73a577fad7..54f06fb928f2 100644
+--- a/servo/components/script/dom/vrdisplay.rs
++++ b/servo/components/script/dom/vrdisplay.rs
+@@ -268,7 +268,7 @@ impl VRDisplayMethods for VRDisplay {
+ fn CancelAnimationFrame(&self, handle: u32) {
+ if self.presenting.get() {
+ let mut list = self.raf_callback_list.borrow_mut();
+- if let Some(mut pair) = list.iter_mut().find(|pair| pair.0 == handle) {
++ if let Some(pair) = list.iter_mut().find(|pair| pair.0 == handle) {
+ pair.1 = None;
+ }
+ } else {
+diff --git a/servo/components/script/dom/webglrenderingcontext.rs b/servo/components/script/dom/webglrenderingcontext.rs
+index 73d4ddba1b90..62c92b42785c 100644
+--- a/servo/components/script/dom/webglrenderingcontext.rs
++++ b/servo/components/script/dom/webglrenderingcontext.rs
+@@ -2434,7 +2434,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
+ }
+
+ typedarray!(in(cx) let mut pixels_data: ArrayBufferView = pixels);
+- let (array_type, mut data) = match { pixels_data.as_mut() } {
++ let (array_type, data) = match { pixels_data.as_mut() } {
+ Ok(data) => (data.get_array_type(), data.as_mut_slice()),
+ Err(_) => return Err(Error::Type("Not an ArrayBufferView".to_owned())),
+ };
+diff --git a/servo/components/script/dom/xmlhttprequest.rs b/servo/components/script/dom/xmlhttprequest.rs
+index 6ed2dda1851f..e6652d79d706 100644
+--- a/servo/components/script/dom/xmlhttprequest.rs
++++ b/servo/components/script/dom/xmlhttprequest.rs
+@@ -627,7 +627,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
+
+ if !content_type_set {
+ let ct = request.headers.get_mut::<ContentType>();
+- if let Some(mut ct) = ct {
++ if let Some(ct) = ct {
+ if let Some(encoding) = encoding {
+ for param in &mut (ct.0).2 {
+ if param.0 == MimeAttr::Charset {
+diff --git a/servo/components/script/lib.rs b/servo/components/script/lib.rs
+index e1a1ab592cb7..5824d6f2e490 100644
+--- a/servo/components/script/lib.rs
++++ b/servo/components/script/lib.rs
+@@ -9,7 +9,6 @@
+ #![feature(mpsc_select)]
+ #![feature(nonzero)]
+ #![feature(on_unimplemented)]
+-#![feature(option_entry)]
+ #![feature(plugin)]
+ #![feature(proc_macro)]
+ #![feature(stmt_expr_attributes)]
+diff --git a/servo/components/script_plugins/unrooted_must_root.rs b/servo/components/script_plugins/unrooted_must_root.rs
+index 5dbd2b1a3bdd..f3f5e60ab62a 100644
+--- a/servo/components/script_plugins/unrooted_must_root.rs
++++ b/servo/components/script_plugins/unrooted_must_root.rs
+@@ -182,7 +182,7 @@ impl<'a, 'b, 'tcx> visit::Visitor<'tcx> for FnDefVisitor<'a, 'b, 'tcx> {
+ }
+
+ match expr.node {
+- /// Trait casts from #[must_root] types are not allowed
++ // Trait casts from #[must_root] types are not allowed
+ hir::ExprCast(ref subexpr, _) => require_rooted(cx, self.in_new_function, &*subexpr),
+ // This catches assignments... the main point of this would be to catch mutable
+ // references to `JS<T>`.
+@@ -206,13 +206,21 @@ impl<'a, 'b, 'tcx> visit::Visitor<'tcx> for FnDefVisitor<'a, 'b, 'tcx> {
+ fn visit_pat(&mut self, pat: &'tcx hir::Pat) {
+ let cx = self.cx;
+
+- if let hir::PatKind::Binding(hir::BindingMode::BindByValue(_), _, _, _) = pat.node {
+- let ty = cx.tables.pat_ty(pat);
+- if is_unrooted_ty(cx, ty, self.in_new_function) {
+- cx.span_lint(UNROOTED_MUST_ROOT,
+- pat.span,
+- &format!("Expression of type {:?} must be rooted", ty))
++ // We want to detect pattern bindings that move a value onto the stack.
++ // When "default binding modes" https://github.com/rust-lang/rust/issues/42640
++ // are implemented, the `Unannotated` case could cause false-positives.
++ // These should be fixable by adding an explicit `ref`.
++ match pat.node {
++ hir::PatKind::Binding(hir::BindingAnnotation::Unannotated, _, _, _) |
++ hir::PatKind::Binding(hir::BindingAnnotation::Mutable, _, _, _) => {
++ let ty = cx.tables.pat_ty(pat);
++ if is_unrooted_ty(cx, ty, self.in_new_function) {
++ cx.span_lint(UNROOTED_MUST_ROOT,
++ pat.span,
++ &format!("Expression of type {:?} must be rooted", ty))
++ }
+ }
++ _ => {}
+ }
+
+ visit::walk_pat(self, pat);
+diff --git a/servo/components/selectors/matching.rs b/servo/components/selectors/matching.rs
+index 7bd9814d26fb..8f6b2fa6aa54 100644
+--- a/servo/components/selectors/matching.rs
++++ b/servo/components/selectors/matching.rs
+@@ -458,7 +458,7 @@ where
+ /// Matches a complex selector.
+ pub fn matches_complex_selector<E, F>(mut iter: SelectorIter<E::Impl>,
+ element: &E,
+- mut context: &mut LocalMatchingContext<E::Impl>,
++ context: &mut LocalMatchingContext<E::Impl>,
+ flags_setter: &mut F)
+ -> bool
+ where E: Element,
+diff --git a/servo/components/selectors/parser.rs b/servo/components/selectors/parser.rs
+index 490399ce38ce..6b2c1f2b4e86 100644
+--- a/servo/components/selectors/parser.rs
++++ b/servo/components/selectors/parser.rs
+@@ -1464,7 +1464,7 @@ fn parse_negation<'i, 't, P, E, Impl>(parser: &P,
+ fn parse_compound_selector<'i, 't, P, E, Impl>(
+ parser: &P,
+ input: &mut CssParser<'i, 't>,
+- mut builder: &mut SelectorBuilder<Impl>)
++ builder: &mut SelectorBuilder<Impl>)
+ -> Result<bool, ParseError<'i, SelectorParseError<'i, E>>>
+ where P: Parser<'i, Impl=Impl, Error=E>, Impl: SelectorImpl
+ {
+diff --git a/servo/components/style/invalidation/element/invalidator.rs b/servo/components/style/invalidation/element/invalidator.rs
+index 848c5cd13dc8..b8510ba3169b 100644
+--- a/servo/components/style/invalidation/element/invalidator.rs
++++ b/servo/components/style/invalidation/element/invalidator.rs
+@@ -154,7 +154,7 @@ impl<'a, 'b: 'a, E> TreeStyleInvalidator<'a, 'b, E>
+ trace!(" > visitedness change, force subtree restyle");
+ // We can't just return here because there may also be attribute
+ // changes as well that imply additional hints.
+- let mut data = self.data.as_mut().unwrap();
++ let data = self.data.as_mut().unwrap();
+ data.restyle.hint.insert(RestyleHint::restyle_subtree());
+ }
+
+diff --git a/servo/components/style/matching.rs b/servo/components/style/matching.rs
+index b62bc54bf768..f58d7cd123e6 100644
+--- a/servo/components/style/matching.rs
++++ b/servo/components/style/matching.rs
+@@ -440,7 +440,7 @@ pub trait MatchMethods : TElement {
+ fn finish_restyle(
+ &self,
+ context: &mut StyleContext<Self>,
+- mut data: &mut ElementData,
++ data: &mut ElementData,
+ mut new_styles: ElementStyles,
+ important_rules_changed: bool,
+ ) -> ChildCascadeRequirement {
+diff --git a/servo/components/style/properties/properties.mako.rs b/servo/components/style/properties/properties.mako.rs
+index d98e173db5ba..81ff00fb6d5e 100644
+--- a/servo/components/style/properties/properties.mako.rs
++++ b/servo/components/style/properties/properties.mako.rs
+@@ -3364,7 +3364,7 @@ pub fn modify_border_style_for_inline_sides(style: &mut Arc<ComputedValues>,
+ return;
+ }
+ }
+- let mut style = Arc::make_mut(style);
++ let style = Arc::make_mut(style);
+ let border = Arc::make_mut(&mut style.border);
+ match side {
+ PhysicalSide::Left => {
+diff --git a/servo/components/style/style_adjuster.rs b/servo/components/style/style_adjuster.rs
+index 03b15916b237..bcda598af9c7 100644
+--- a/servo/components/style/style_adjuster.rs
++++ b/servo/components/style/style_adjuster.rs
+@@ -269,7 +269,7 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> {
+
+ if overflow_x != original_overflow_x ||
+ overflow_y != original_overflow_y {
+- let mut box_style = self.style.mutate_box();
++ let box_style = self.style.mutate_box();
+ box_style.set_overflow_x(overflow_x);
+ box_style.set_overflow_y(overflow_y);
+ }
+diff --git a/servo/components/style/style_resolver.rs b/servo/components/style/style_resolver.rs
+index cf512c4fbdd2..3fc1d57cc8f7 100644
+--- a/servo/components/style/style_resolver.rs
++++ b/servo/components/style/style_resolver.rs
+@@ -247,7 +247,7 @@ where
+ Some(&*primary_style.style)
+ };
+
+- for (i, mut inputs) in pseudo_array.iter_mut().enumerate() {
++ for (i, inputs) in pseudo_array.iter_mut().enumerate() {
+ if let Some(inputs) = inputs.take() {
+ let pseudo = PseudoElement::from_eager_index(i);
+ pseudo_styles.set(
+diff --git a/servo/components/style/stylesheets/rule_list.rs b/servo/components/style/stylesheets/rule_list.rs
+index 82e78015400d..14b3dc5e7696 100644
+--- a/servo/components/style/stylesheets/rule_list.rs
++++ b/servo/components/style/stylesheets/rule_list.rs
+@@ -150,7 +150,7 @@ impl CssRulesHelpers for RawOffsetArc<Locked<CssRules>> {
+
+ {
+ let mut write_guard = lock.write();
+- let mut rules = self.write_with(&mut write_guard);
++ let rules = self.write_with(&mut write_guard);
+ // Step 5
+ // Computes the maximum allowed parser state at a given index.
+ let rev_state = rules.0.get(index).map_or(State::Body, CssRule::rule_state);
+diff --git a/servo/components/style/stylesheets/rule_parser.rs b/servo/components/style/stylesheets/rule_parser.rs
+index 007d7e11026e..f0d224e498a7 100644
+--- a/servo/components/style/stylesheets/rule_parser.rs
++++ b/servo/components/style/stylesheets/rule_parser.rs
+@@ -209,7 +209,7 @@ impl<'a, 'i> AtRuleParser<'i> for TopLevelRuleParser<'a> {
+ let id = register_namespace(&url)
+ .map_err(|()| StyleParseError::UnspecifiedError)?;
+
+- let mut namespaces = self.namespaces.as_mut().unwrap();
++ let namespaces = self.namespaces.as_mut().unwrap();
+
+ let opt_prefix = if let Ok(prefix) = prefix_result {
+ let prefix = Prefix::from(prefix.as_ref());
+diff --git a/servo/components/style/stylesheets/rules_iterator.rs b/servo/components/style/stylesheets/rules_iterator.rs
+index 95a3ab8b3885..65e1b637ae52 100644
+--- a/servo/components/style/stylesheets/rules_iterator.rs
++++ b/servo/components/style/stylesheets/rules_iterator.rs
+@@ -70,7 +70,7 @@ impl<'a, 'b, C> Iterator for RulesIterator<'a, 'b, C>
+
+ let rule;
+ let sub_iter = {
+- let mut nested_iter = self.stack.last_mut().unwrap();
++ let nested_iter = self.stack.last_mut().unwrap();
+ rule = match nested_iter.next() {
+ Some(r) => r,
+ None => {
+diff --git a/servo/components/webdriver_server/lib.rs b/servo/components/webdriver_server/lib.rs
+index bd2f667f9892..28a4885f0d41 100644
+--- a/servo/components/webdriver_server/lib.rs
++++ b/servo/components/webdriver_server/lib.rs
+@@ -702,7 +702,7 @@ impl Handler {
+ fn handle_set_timeouts(&mut self,
+ parameters: &TimeoutsParameters)
+ -> WebDriverResult<WebDriverResponse> {
+- let mut session = self.session
++ let session = self.session
+ .as_mut()
+ .ok_or(WebDriverError::new(ErrorStatus::SessionNotCreated, ""))?;
+
+diff --git a/servo/rust-commit-hash b/servo/rust-commit-hash
+index d4f08fe97644..a08d23cd1a71 100644
+--- a/servo/rust-commit-hash
++++ b/servo/rust-commit-hash
+@@ -1 +1 @@
+-599be0d18f4c6ddf36366d2a5a2ca6dc65886896
++13d94d5fa8129a34f5c77a1bcd76983f5aed2434
+diff --git a/servo/tests/unit/style/stylist.rs b/servo/tests/unit/style/stylist.rs
+index da9a9478957a..52067b501788 100644
+--- a/servo/tests/unit/style/stylist.rs
++++ b/servo/tests/unit/style/stylist.rs
+@@ -51,19 +51,6 @@ fn get_mock_rules(css_selectors: &[&str]) -> (Vec<Vec<Rule>>, SharedRwLock) {
+ }).collect(), shared_lock)
+ }
+
+-fn get_mock_map(selectors: &[&str]) -> (SelectorMap<Rule>, SharedRwLock) {
+- let mut map = SelectorMap::<Rule>::new();
+- let (selector_rules, shared_lock) = get_mock_rules(selectors);
+-
+- for rules in selector_rules.into_iter() {
+- for rule in rules.into_iter() {
+- map.insert(rule, QuirksMode::NoQuirks)
+- }
+- }
+-
+- (map, shared_lock)
+-}
+-
+ fn parse_selectors(selectors: &[&str]) -> Vec<Selector<SelectorImpl>> {
+ selectors.iter()
+ .map(|x| SelectorParser::parse_author_origin_no_namespace(x).unwrap().0
+
+From 78ec5fc0bcd627a44274d0d6f310624ebdaca64e Mon Sep 17 00:00:00 2001
+From: Simon Sapin <simon.sapin@exyr.org>
+Date: Thu, 17 Aug 2017 11:05:32 -0500
+Subject: [PATCH 05/16] servo: Merge #18126 - geckolib: Fix some warnings
+ (treated as error) new in Rust Nigthly (from servo:glow-fox); r=emilio
+
+Source-Repo: https://github.com/servo/servo
+Source-Revision: cc86ca2bcdec5e89ee5279085ea38db63ef41af9
+
+(cherry picked from commit mozilla/gecko-dev@f0acf27d189d)
+---
+ servo/components/style/gecko/conversions.rs | 2 +-
+ servo/components/style/gecko/wrapper.rs | 2 +-
+ .../style/gecko_bindings/sugar/ns_t_array.rs | 4 ++--
+ servo/components/style/properties/gecko.mako.rs | 18 +++++++++---------
+ servo/components/style/style_adjuster.rs | 4 ++--
+ servo/ports/geckolib/glue.rs | 12 ++++++------
+ 6 files changed, 21 insertions(+), 21 deletions(-)
+
+diff --git a/servo/components/style/gecko/conversions.rs b/servo/components/style/gecko/conversions.rs
+index 8f3fb6bf2d0f..51015997c5c1 100644
+--- a/servo/components/style/gecko/conversions.rs
++++ b/servo/components/style/gecko/conversions.rs
+@@ -348,7 +348,7 @@ impl nsStyleImage {
+ // NB: stops are guaranteed to be none in the gecko side by
+ // default.
+
+- let mut gecko_stop = unsafe {
++ let gecko_stop = unsafe {
+ &mut (*gecko_gradient).mStops[index]
+ };
+ let mut coord = nsStyleCoord::null();
+diff --git a/servo/components/style/gecko/wrapper.rs b/servo/components/style/gecko/wrapper.rs
+index 3c61daefe30a..5ad9668540d4 100644
+--- a/servo/components/style/gecko/wrapper.rs
++++ b/servo/components/style/gecko/wrapper.rs
+@@ -429,7 +429,7 @@ impl<'lb> GeckoXBLBinding<'lb> {
+ }
+ }
+
+- fn each_xbl_stylist<F>(self, mut f: &mut F)
++ fn each_xbl_stylist<F>(self, f: &mut F)
+ where
+ F: FnMut(&Stylist),
+ {
+diff --git a/servo/components/style/gecko_bindings/sugar/ns_t_array.rs b/servo/components/style/gecko_bindings/sugar/ns_t_array.rs
+index 6bc389702f54..068e10ddea1b 100644
+--- a/servo/components/style/gecko_bindings/sugar/ns_t_array.rs
++++ b/servo/components/style/gecko_bindings/sugar/ns_t_array.rs
+@@ -90,7 +90,7 @@ impl<T> nsTArray<T> {
+ // this can leak
+ debug_assert!(len >= self.len() as u32);
+ self.ensure_capacity(len as usize);
+- let mut header = self.header_mut();
++ let header = self.header_mut();
+ header.mLength = len;
+ }
+
+@@ -99,7 +99,7 @@ impl<T> nsTArray<T> {
+ /// This will not leak since it only works on POD types (and thus doesn't assert)
+ pub unsafe fn set_len_pod(&mut self, len: u32) where T: Copy {
+ self.ensure_capacity(len as usize);
+- let mut header = unsafe { self.header_mut() };
++ let header = unsafe { self.header_mut() };
+ header.mLength = len;
+ }
+ }
+diff --git a/servo/components/style/properties/gecko.mako.rs b/servo/components/style/properties/gecko.mako.rs
+index b0d5ef189ce2..be038f9f76d4 100644
+--- a/servo/components/style/properties/gecko.mako.rs
++++ b/servo/components/style/properties/gecko.mako.rs
+@@ -4136,14 +4136,14 @@ fn static_assert() {
+ fn init_shadow(filter: &mut nsStyleFilter) -> &mut nsCSSShadowArray {
+ unsafe {
+ let ref mut union = filter.__bindgen_anon_1;
+- let mut shadow_array: &mut *mut nsCSSShadowArray = union.mDropShadow.as_mut();
++ let shadow_array: &mut *mut nsCSSShadowArray = union.mDropShadow.as_mut();
+ *shadow_array = Gecko_NewCSSShadowArray(1);
+
+ &mut **shadow_array
+ }
+ }
+
+- let mut gecko_shadow = init_shadow(gecko_filter);
++ let gecko_shadow = init_shadow(gecko_filter);
+ gecko_shadow.mArray[0].set_from_simple_shadow(shadow);
+ },
+ Url(ref url) => {
+@@ -4665,14 +4665,14 @@ fn static_assert() {
+ unsafe {
+ // We have to be very careful to avoid a copy here!
+ let ref mut union = ${ident}.__bindgen_anon_1;
+- let mut shape: &mut *mut StyleBasicShape = union.mBasicShape.as_mut();
++ let shape: &mut *mut StyleBasicShape = union.mBasicShape.as_mut();
+ *shape = Gecko_NewBasicShape(ty);
+ &mut **shape
+ }
+ }
+ match servo_shape {
+ BasicShape::Inset(inset) => {
+- let mut shape = init_shape(${ident}, StyleBasicShapeType::Inset);
++ let shape = init_shape(${ident}, StyleBasicShapeType::Inset);
+ unsafe { shape.mCoordinates.set_len(4) };
+
+ // set_len() can't call constructors, so the coordinates
+@@ -4694,7 +4694,7 @@ fn static_assert() {
+ set_corners_from_radius(inset.round, &mut shape.mRadius);
+ }
+ BasicShape::Circle(circ) => {
+- let mut shape = init_shape(${ident}, StyleBasicShapeType::Circle);
++ let shape = init_shape(${ident}, StyleBasicShapeType::Circle);
+ unsafe { shape.mCoordinates.set_len(1) };
+ shape.mCoordinates[0].leaky_set_null();
+ circ.radius.to_gecko_style_coord(&mut shape.mCoordinates[0]);
+@@ -4702,7 +4702,7 @@ fn static_assert() {
+ shape.mPosition = circ.position.into();
+ }
+ BasicShape::Ellipse(el) => {
+- let mut shape = init_shape(${ident}, StyleBasicShapeType::Ellipse);
++ let shape = init_shape(${ident}, StyleBasicShapeType::Ellipse);
+ unsafe { shape.mCoordinates.set_len(2) };
+ shape.mCoordinates[0].leaky_set_null();
+ el.semiaxis_x.to_gecko_style_coord(&mut shape.mCoordinates[0]);
+@@ -4712,7 +4712,7 @@ fn static_assert() {
+ shape.mPosition = el.position.into();
+ }
+ BasicShape::Polygon(poly) => {
+- let mut shape = init_shape(${ident}, StyleBasicShapeType::Polygon);
++ let shape = init_shape(${ident}, StyleBasicShapeType::Polygon);
+ unsafe {
+ shape.mCoordinates.set_len(poly.coordinates.len() as u32 * 2);
+ }
+@@ -4797,7 +4797,7 @@ clip-path
+ bindings::Gecko_nsStyleSVG_SetDashArrayLength(&mut self.gecko, v.len() as u32);
+ }
+
+- for (mut gecko, servo) in self.gecko.mStrokeDasharray.iter_mut().zip(v) {
++ for (gecko, servo) in self.gecko.mStrokeDasharray.iter_mut().zip(v) {
+ match servo {
+ Either::First(number) => gecko.set_value(CoordDataValue::Factor(number)),
+ Either::Second(lop) => gecko.set(lop),
+@@ -4885,7 +4885,7 @@ clip-path
+ }
+
+ self.gecko.mContextPropsBits = 0;
+- for (mut gecko, servo) in self.gecko.mContextProps.iter_mut().zip(v) {
++ for (gecko, servo) in self.gecko.mContextProps.iter_mut().zip(v) {
+ if servo.0 == atom!("fill") {
+ self.gecko.mContextPropsBits |= structs::NS_STYLE_CONTEXT_PROPERTY_FILL as u8;
+ } else if servo.0 == atom!("stroke") {
+diff --git a/servo/components/style/style_adjuster.rs b/servo/components/style/style_adjuster.rs
+index bcda598af9c7..6e51fa74072a 100644
+--- a/servo/components/style/style_adjuster.rs
++++ b/servo/components/style/style_adjuster.rs
+@@ -167,7 +167,7 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> {
+ // When 'contain: paint', update overflow from 'visible' to 'clip'.
+ if self.style.get_box().clone_contain().contains(contain::PAINT) {
+ if self.style.get_box().clone_overflow_x() == overflow::visible {
+- let mut box_style = self.style.mutate_box();
++ let box_style = self.style.mutate_box();
+ box_style.set_overflow_x(overflow::_moz_hidden_unscrollable);
+ box_style.set_overflow_y(overflow::_moz_hidden_unscrollable);
+ }
+@@ -182,7 +182,7 @@ impl<'a, 'b: 'a> StyleAdjuster<'a, 'b> {
+ use properties::longhands::font_style::computed_value::T as font_style;
+ use properties::longhands::font_weight::computed_value::T as font_weight;
+ if self.style.get_font().clone__moz_math_variant() != moz_math_variant::none {
+- let mut font_style = self.style.mutate_font();
++ let font_style = self.style.mutate_font();
+ // Sadly we don't have a nice name for the computed value
+ // of "font-weight: normal".
+ font_style.set_font_weight(font_weight::normal());
+diff --git a/servo/ports/geckolib/glue.rs b/servo/ports/geckolib/glue.rs
+index befdda61e0b3..b52b45354d84 100644
+--- a/servo/ports/geckolib/glue.rs
++++ b/servo/ports/geckolib/glue.rs
+@@ -816,7 +816,7 @@ pub extern "C" fn Servo_StyleSet_AppendStyleSheet(
+ ) {
+ let global_style_data = &*GLOBAL_STYLE_DATA;
+ let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
+- let mut data = &mut *data;
++ let data = &mut *data;
+ let guard = global_style_data.shared_lock.read();
+ data.stylesheets.append_stylesheet(
+ &data.stylist,
+@@ -868,7 +868,7 @@ pub extern "C" fn Servo_StyleSet_PrependStyleSheet(
+ ) {
+ let global_style_data = &*GLOBAL_STYLE_DATA;
+ let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
+- let mut data = &mut *data;
++ let data = &mut *data;
+ let guard = global_style_data.shared_lock.read();
+ data.stylesheets.prepend_stylesheet(
+ &data.stylist,
+@@ -886,7 +886,7 @@ pub extern "C" fn Servo_StyleSet_InsertStyleSheetBefore(
+ ) {
+ let global_style_data = &*GLOBAL_STYLE_DATA;
+ let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
+- let mut data = &mut *data;
++ let data = &mut *data;
+ let guard = global_style_data.shared_lock.read();
+ data.stylesheets.insert_stylesheet_before(
+ &data.stylist,
+@@ -904,7 +904,7 @@ pub extern "C" fn Servo_StyleSet_RemoveStyleSheet(
+ ) {
+ let global_style_data = &*GLOBAL_STYLE_DATA;
+ let mut data = PerDocumentStyleData::from_ffi(raw_data).borrow_mut();
+- let mut data = &mut *data;
++ let data = &mut *data;
+ let guard = global_style_data.shared_lock.read();
+ data.stylesheets.remove_stylesheet(
+ &data.stylist,
+@@ -1275,7 +1275,7 @@ pub extern "C" fn Servo_StyleRule_GetSpecificityAtIndex(
+ specificity: *mut u64
+ ) {
+ read_locked_arc(rule, |rule: &StyleRule| {
+- let mut specificity = unsafe { specificity.as_mut().unwrap() };
++ let specificity = unsafe { specificity.as_mut().unwrap() };
+ let index = index as usize;
+ if index >= rule.selectors.0.len() {
+ *specificity = 0;
+@@ -2776,7 +2776,7 @@ pub extern "C" fn Servo_NoteExplicitHints(element: RawGeckoElementBorrowed,
+ pub extern "C" fn Servo_TakeChangeHint(element: RawGeckoElementBorrowed,
+ was_restyled: *mut bool) -> nsChangeHint
+ {
+- let mut was_restyled = unsafe { was_restyled.as_mut().unwrap() };
++ let was_restyled = unsafe { was_restyled.as_mut().unwrap() };
+ let element = GeckoElement(element);
+
+ let damage = match element.mutate_data() {
+
+From 491dc73e2e9ece2857f3ed77ecea0284e47a6722 Mon Sep 17 00:00:00 2001
+From: Simon Sapin <simon.sapin@exyr.org>
+Date: Thu, 9 Nov 2017 10:00:38 -0600
+Subject: [PATCH 06/16] servo: Merge #19128 - Upgrade to rustc 1.23.0-nightly
+ (02004ef78 2017-11-08) (from servo:asciiext); r=nox
+
+This fixes some new warnings, some of which (in `style`) are treated as errors. See https://users.rust-lang.org/t/psa-dealing-with-warning-unused-import-std-ascii-asciiext-in-today-s-nightly/13726
+
+Source-Repo: https://github.com/servo/servo
+Source-Revision: c46c9dc019ffe5447297140c22cd8b6ee95a9f5f
+
+(cherry picked from commit mozilla/gecko-dev@a6f7082122e9)
+---
+ servo/components/gfx/font.rs | 1 -
+ servo/components/net/fetch/cors_cache.rs | 1 -
+ servo/components/net/websocket_loader.rs | 1 -
+ servo/components/net_traits/response.rs | 1 -
+ servo/components/script/dom/bindings/str.rs | 1 -
+ servo/components/script/dom/cssstyledeclaration.rs | 1 -
+ servo/components/script/dom/document.rs | 1 -
+ servo/components/script/dom/element.rs | 1 -
+ servo/components/script/dom/htmlelement.rs | 1 -
+ servo/components/script/dom/htmllinkelement.rs | 1 -
+ servo/components/script/dom/htmlmetaelement.rs | 1 -
+ servo/components/script/dom/htmlscriptelement.rs | 1 -
+ servo/components/script/dom/macros.rs | 1 -
+ servo/components/script/dom/namednodemap.rs | 1 -
+ servo/components/script/dom/serviceworkercontainer.rs | 1 -
+ servo/components/script/dom/servoparser/async_html.rs | 1 -
+ servo/components/script/dom/servoparser/mod.rs | 1 -
+ servo/components/script/dom/websocket.rs | 1 -
+ servo/components/script/dom/window.rs | 1 -
+ servo/components/script/dom/xmlhttprequest.rs | 1 -
+ servo/components/style/servo/selector_parser.rs | 1 -
+ 21 files changed, 21 deletions(-)
+
+diff --git a/servo/components/gfx/font.rs b/servo/components/gfx/font.rs
+index 357f61a2d7ab..acf98e6f9e9a 100644
+--- a/servo/components/gfx/font.rs
++++ b/servo/components/gfx/font.rs
+@@ -10,7 +10,6 @@ use platform::font::{FontHandle, FontTable};
+ use platform::font_context::FontContextHandle;
+ use platform::font_template::FontTemplateData;
+ use smallvec::SmallVec;
+-use std::ascii::AsciiExt;
+ use std::borrow::ToOwned;
+ use std::cell::RefCell;
+ use std::collections::HashMap;
+diff --git a/servo/components/net/fetch/cors_cache.rs b/servo/components/net/fetch/cors_cache.rs
+index 6c30782453d5..8962dd2c9985 100644
+--- a/servo/components/net/fetch/cors_cache.rs
++++ b/servo/components/net/fetch/cors_cache.rs
+@@ -12,7 +12,6 @@
+ use hyper::method::Method;
+ use net_traits::request::{CredentialsMode, Origin, Request};
+ use servo_url::ServoUrl;
+-use std::ascii::AsciiExt;
+ use time::{self, Timespec};
+
+ /// Union type for CORS cache entries
+diff --git a/servo/components/net/websocket_loader.rs b/servo/components/net/websocket_loader.rs
+index 71178bbc7d93..f2d36b4fdae9 100644
+--- a/servo/components/net/websocket_loader.rs
++++ b/servo/components/net/websocket_loader.rs
+@@ -19,7 +19,6 @@ use net_traits::{CookieSource, MessageData, NetworkError, WebSocketCommunicate,
+ use net_traits::{WebSocketDomAction, WebSocketNetworkEvent};
+ use net_traits::request::{Destination, Type};
+ use servo_url::ServoUrl;
+-use std::ascii::AsciiExt;
+ use std::io::{self, Write};
+ use std::net::TcpStream;
+ use std::sync::{Arc, Mutex};
+diff --git a/servo/components/net_traits/response.rs b/servo/components/net_traits/response.rs
+index 74525a85f07b..a7699d8ad911 100644
+--- a/servo/components/net_traits/response.rs
++++ b/servo/components/net_traits/response.rs
+@@ -9,7 +9,6 @@ use hyper::header::{AccessControlExposeHeaders, ContentType, Headers};
+ use hyper::status::StatusCode;
+ use hyper_serde::Serde;
+ use servo_url::ServoUrl;
+-use std::ascii::AsciiExt;
+ use std::sync::{Arc, Mutex};
+
+ /// [Response type](https://fetch.spec.whatwg.org/#concept-response-type)
+diff --git a/servo/components/script/dom/bindings/str.rs b/servo/components/script/dom/bindings/str.rs
+index 761acab30682..e2c91a1f5061 100644
+--- a/servo/components/script/dom/bindings/str.rs
++++ b/servo/components/script/dom/bindings/str.rs
+@@ -7,7 +7,6 @@
+ use cssparser::CowRcStr;
+ use html5ever::{LocalName, Namespace};
+ use servo_atoms::Atom;
+-use std::ascii::AsciiExt;
+ use std::borrow::{Borrow, Cow, ToOwned};
+ use std::fmt;
+ use std::hash::{Hash, Hasher};
+diff --git a/servo/components/script/dom/cssstyledeclaration.rs b/servo/components/script/dom/cssstyledeclaration.rs
+index ddf085b34913..9bab2b638c62 100644
+--- a/servo/components/script/dom/cssstyledeclaration.rs
++++ b/servo/components/script/dom/cssstyledeclaration.rs
+@@ -16,7 +16,6 @@ use dom::window::Window;
+ use dom_struct::dom_struct;
+ use servo_arc::Arc;
+ use servo_url::ServoUrl;
+-use std::ascii::AsciiExt;
+ use style::attr::AttrValue;
+ use style::properties::{Importance, PropertyDeclarationBlock, PropertyId, LonghandId, ShorthandId};
+ use style::properties::{parse_one_declaration_into, parse_style_attribute, SourcePropertyDeclaration};
+diff --git a/servo/components/script/dom/document.rs b/servo/components/script/dom/document.rs
+index 71bb02eaa364..464b3658d3c0 100644
+--- a/servo/components/script/dom/document.rs
++++ b/servo/components/script/dom/document.rs
+@@ -122,7 +122,6 @@ use servo_arc::Arc;
+ use servo_atoms::Atom;
+ use servo_config::prefs::PREFS;
+ use servo_url::{ImmutableOrigin, MutableOrigin, ServoUrl};
+-use std::ascii::AsciiExt;
+ use std::borrow::ToOwned;
+ use std::cell::{Cell, Ref, RefMut};
+ use std::collections::{HashMap, HashSet, VecDeque};
+diff --git a/servo/components/script/dom/element.rs b/servo/components/script/dom/element.rs
+index 59db577c4eb3..ea7567020b97 100644
+--- a/servo/components/script/dom/element.rs
++++ b/servo/components/script/dom/element.rs
+@@ -95,7 +95,6 @@ use selectors::matching::{RelevantLinkStatus, matches_selector_list};
+ use selectors::sink::Push;
+ use servo_arc::Arc;
+ use servo_atoms::Atom;
+-use std::ascii::AsciiExt;
+ use std::borrow::Cow;
+ use std::cell::{Cell, Ref};
+ use std::convert::TryFrom;
+diff --git a/servo/components/script/dom/htmlelement.rs b/servo/components/script/dom/htmlelement.rs
+index 59846595166a..eb1f1022c8b7 100644
+--- a/servo/components/script/dom/htmlelement.rs
++++ b/servo/components/script/dom/htmlelement.rs
+@@ -31,7 +31,6 @@ use dom::nodelist::NodeList;
+ use dom::virtualmethods::VirtualMethods;
+ use dom_struct::dom_struct;
+ use html5ever::{LocalName, Prefix};
+-use std::ascii::AsciiExt;
+ use std::borrow::ToOwned;
+ use std::default::Default;
+ use std::rc::Rc;
+diff --git a/servo/components/script/dom/htmllinkelement.rs b/servo/components/script/dom/htmllinkelement.rs
+index 8175da5c913c..5da65a49d34d 100644
+--- a/servo/components/script/dom/htmllinkelement.rs
++++ b/servo/components/script/dom/htmllinkelement.rs
+@@ -27,7 +27,6 @@ use net_traits::ReferrerPolicy;
+ use script_layout_interface::message::Msg;
+ use script_traits::{MozBrowserEvent, ScriptMsg as ConstellationMsg};
+ use servo_arc::Arc;
+-use std::ascii::AsciiExt;
+ use std::borrow::ToOwned;
+ use std::cell::Cell;
+ use std::default::Default;
+diff --git a/servo/components/script/dom/htmlmetaelement.rs b/servo/components/script/dom/htmlmetaelement.rs
+index 9370675eb6bd..dc3ee9aa12de 100644
+--- a/servo/components/script/dom/htmlmetaelement.rs
++++ b/servo/components/script/dom/htmlmetaelement.rs
+@@ -22,7 +22,6 @@ use html5ever::{LocalName, Prefix};
+ use parking_lot::RwLock;
+ use servo_arc::Arc;
+ use servo_config::prefs::PREFS;
+-use std::ascii::AsciiExt;
+ use std::sync::atomic::AtomicBool;
+ use style::attr::AttrValue;
+ use style::media_queries::MediaList;
+diff --git a/servo/components/script/dom/htmlscriptelement.rs b/servo/components/script/dom/htmlscriptelement.rs
+index ea0cc4c25e8e..f5f758060525 100644
+--- a/servo/components/script/dom/htmlscriptelement.rs
++++ b/servo/components/script/dom/htmlscriptelement.rs
+@@ -36,7 +36,6 @@ use network_listener::{NetworkListener, PreInvoke};
+ use servo_atoms::Atom;
+ use servo_config::opts;
+ use servo_url::ServoUrl;
+-use std::ascii::AsciiExt;
+ use std::cell::Cell;
+ use std::fs::File;
+ use std::io::{Read, Write};
+diff --git a/servo/components/script/dom/macros.rs b/servo/components/script/dom/macros.rs
+index a1bb30657252..9cd5fb9a8dc5 100644
+--- a/servo/components/script/dom/macros.rs
++++ b/servo/components/script/dom/macros.rs
+@@ -149,7 +149,6 @@ macro_rules! make_enumerated_getter(
+ fn $attr(&self) -> DOMString {
+ use dom::bindings::inheritance::Castable;
+ use dom::element::Element;
+- use std::ascii::AsciiExt;
+ let element = self.upcast::<Element>();
+ let mut val = element.get_string_attribute(&local_name!($htmlname));
+ val.make_ascii_lowercase();
+diff --git a/servo/components/script/dom/namednodemap.rs b/servo/components/script/dom/namednodemap.rs
+index 9d92bf11c2d2..4f1b13a999e8 100644
+--- a/servo/components/script/dom/namednodemap.rs
++++ b/servo/components/script/dom/namednodemap.rs
+@@ -15,7 +15,6 @@ use dom::element::Element;
+ use dom::window::Window;
+ use dom_struct::dom_struct;
+ use html5ever::LocalName;
+-use std::ascii::AsciiExt;
+
+ #[dom_struct]
+ pub struct NamedNodeMap {
+diff --git a/servo/components/script/dom/serviceworkercontainer.rs b/servo/components/script/dom/serviceworkercontainer.rs
+index ba2e327409f1..3a0ed0fcb253 100644
+--- a/servo/components/script/dom/serviceworkercontainer.rs
++++ b/servo/components/script/dom/serviceworkercontainer.rs
+@@ -16,7 +16,6 @@ use dom::serviceworker::ServiceWorker;
+ use dom_struct::dom_struct;
+ use script_thread::ScriptThread;
+ use serviceworkerjob::{Job, JobType};
+-use std::ascii::AsciiExt;
+ use std::default::Default;
+ use std::rc::Rc;
+
+diff --git a/servo/components/script/dom/servoparser/async_html.rs b/servo/components/script/dom/servoparser/async_html.rs
+index 70d2008f49f6..f3369f93226d 100644
+--- a/servo/components/script/dom/servoparser/async_html.rs
++++ b/servo/components/script/dom/servoparser/async_html.rs
+@@ -27,7 +27,6 @@ use html5ever::tokenizer::{Tokenizer as HtmlTokenizer, TokenizerOpts, TokenizerR
+ use html5ever::tree_builder::{ElementFlags, NodeOrText as HtmlNodeOrText, NextParserState, QuirksMode, TreeSink};
+ use html5ever::tree_builder::{TreeBuilder, TreeBuilderOpts};
+ use servo_url::ServoUrl;
+-use std::ascii::AsciiExt;
+ use std::borrow::Cow;
+ use std::cell::Cell;
+ use std::collections::HashMap;
+diff --git a/servo/components/script/dom/servoparser/mod.rs b/servo/components/script/dom/servoparser/mod.rs
+index 6a5a723111da..bb8b066c2439 100644
+--- a/servo/components/script/dom/servoparser/mod.rs
++++ b/servo/components/script/dom/servoparser/mod.rs
+@@ -46,7 +46,6 @@ use script_traits::DocumentActivity;
+ use servo_config::prefs::PREFS;
+ use servo_config::resource_files::read_resource_file;
+ use servo_url::ServoUrl;
+-use std::ascii::AsciiExt;
+ use std::borrow::Cow;
+ use std::cell::Cell;
+ use std::mem;
+diff --git a/servo/components/script/dom/websocket.rs b/servo/components/script/dom/websocket.rs
+index b533789e6118..80febbe72fe4 100644
+--- a/servo/components/script/dom/websocket.rs
++++ b/servo/components/script/dom/websocket.rs
+@@ -34,7 +34,6 @@ use script_runtime::CommonScriptMsg;
+ use script_runtime::ScriptThreadEventCategory::WebSocketEvent;
+ use script_thread::{Runnable, RunnableWrapper};
+ use servo_url::ServoUrl;
+-use std::ascii::AsciiExt;
+ use std::borrow::ToOwned;
+ use std::cell::Cell;
+ use std::ptr;
+diff --git a/servo/components/script/dom/window.rs b/servo/components/script/dom/window.rs
+index 3c87e5f6b0b4..d10d2131dc5a 100644
+--- a/servo/components/script/dom/window.rs
++++ b/servo/components/script/dom/window.rs
+@@ -88,7 +88,6 @@ use servo_config::opts;
+ use servo_config::prefs::PREFS;
+ use servo_geometry::{f32_rect_to_au_rect, max_rect};
+ use servo_url::{Host, MutableOrigin, ImmutableOrigin, ServoUrl};
+-use std::ascii::AsciiExt;
+ use std::borrow::ToOwned;
+ use std::cell::Cell;
+ use std::collections::{HashMap, HashSet};
+diff --git a/servo/components/script/dom/xmlhttprequest.rs b/servo/components/script/dom/xmlhttprequest.rs
+index e6652d79d706..46e6abeb62e4 100644
+--- a/servo/components/script/dom/xmlhttprequest.rs
++++ b/servo/components/script/dom/xmlhttprequest.rs
+@@ -63,7 +63,6 @@ use script_traits::DocumentActivity;
+ use servo_atoms::Atom;
+ use servo_config::prefs::PREFS;
+ use servo_url::ServoUrl;
+-use std::ascii::AsciiExt;
+ use std::borrow::ToOwned;
+ use std::cell::Cell;
+ use std::default::Default;
+diff --git a/servo/components/style/servo/selector_parser.rs b/servo/components/style/servo/selector_parser.rs
+index 95ef6b0169f5..d205c4ee1170 100644
+--- a/servo/components/style/servo/selector_parser.rs
++++ b/servo/components/style/servo/selector_parser.rs
+@@ -21,7 +21,6 @@ use selectors::Element;
+ use selectors::attr::{AttrSelectorOperation, NamespaceConstraint, CaseSensitivity};
+ use selectors::parser::{SelectorMethods, SelectorParseError};
+ use selectors::visitor::SelectorVisitor;
+-use std::ascii::AsciiExt;
+ use std::fmt;
+ use std::fmt::Debug;
+ use std::mem;
+
+From 3ed0304e043c29a28a1b8f2988f6d403b5c61eb5 Mon Sep 17 00:00:00 2001
+From: Simon Sapin <simon.sapin@exyr.org>
+Date: Thu, 9 Nov 2017 06:49:29 -0600
+Subject: [PATCH 07/16] servo: Merge #19162 - Allow unused imports for AsciiExt
+ in style code (from emilio:ascii-ext); r=emilio
+
+See #19128, this part is cherry-picked so Gecko can build with rust nightly.
+
+Source-Repo: https://github.com/servo/servo
+Source-Revision: e7a654dd13f589e127193267bcb576ffd661c11d
+
+(cherry picked from commit mozilla/gecko-dev@cf341df19ad7)
+---
+ servo/components/selectors/attr.rs | 2 +-
+ servo/components/selectors/parser.rs | 2 +-
+ servo/components/style/attr.rs | 2 +-
+ servo/components/style/counter_style/mod.rs | 2 +-
+ servo/components/style/custom_properties.rs | 2 +-
+ servo/components/style/gecko/generated/pseudo_element_definition.rs | 4 ++--
+ servo/components/style/gecko/pseudo_element_definition.mako.rs | 4 ++--
+ servo/components/style/gecko_string_cache/mod.rs | 2 +-
+ servo/components/style/media_queries.rs | 2 +-
+ servo/components/style/properties/longhand/font.mako.rs | 2 +-
+ servo/components/style/properties/longhand/pointing.mako.rs | 2 +-
+ servo/components/style/str.rs | 2 +-
+ servo/components/style/stylesheets/viewport_rule.rs | 2 +-
+ servo/components/style/values/mod.rs | 2 +-
+ servo/components/style/values/specified/align.rs | 2 +-
+ servo/components/style/values/specified/calc.rs | 2 +-
+ servo/components/style/values/specified/grid.rs | 2 +-
+ servo/components/style/values/specified/length.rs | 2 +-
+ servo/components/style/values/specified/mod.rs | 2 +-
+ servo/components/style/values/specified/text.rs | 2 +-
+ servo/components/style_traits/viewport.rs | 2 +-
+ 21 files changed, 23 insertions(+), 23 deletions(-)
+
+diff --git a/servo/components/selectors/attr.rs b/servo/components/selectors/attr.rs
+index b71be2cca73b..577b52eb26ab 100644
+--- a/servo/components/selectors/attr.rs
++++ b/servo/components/selectors/attr.rs
+@@ -4,7 +4,7 @@
+
+ use cssparser::ToCss;
+ use parser::SelectorImpl;
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::fmt;
+
+ #[derive(Eq, PartialEq, Clone)]
+diff --git a/servo/components/selectors/parser.rs b/servo/components/selectors/parser.rs
+index 6b2c1f2b4e86..d25d3d1cf2d7 100644
+--- a/servo/components/selectors/parser.rs
++++ b/servo/components/selectors/parser.rs
+@@ -13,7 +13,7 @@ use precomputed_hash::PrecomputedHash;
+ use servo_arc::ThinArc;
+ use sink::Push;
+ use smallvec::SmallVec;
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::borrow::{Borrow, Cow};
+ use std::fmt::{self, Display, Debug, Write};
+ use std::iter::Rev;
+diff --git a/servo/components/style/attr.rs b/servo/components/style/attr.rs
+index 9861c4360f98..e34d03f01823 100644
+--- a/servo/components/style/attr.rs
++++ b/servo/components/style/attr.rs
+@@ -16,7 +16,7 @@ use selectors::attr::AttrSelectorOperation;
+ use servo_arc::Arc;
+ use servo_url::ServoUrl;
+ use shared_lock::Locked;
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::str::FromStr;
+ use str::{HTML_SPACE_CHARACTERS, read_exponent, read_fraction};
+ use str::{read_numbers, split_commas, split_html_space_chars};
+diff --git a/servo/components/style/counter_style/mod.rs b/servo/components/style/counter_style/mod.rs
+index 1eb47fedf516..6b55364bca96 100644
+--- a/servo/components/style/counter_style/mod.rs
++++ b/servo/components/style/counter_style/mod.rs
+@@ -15,7 +15,7 @@ use error_reporting::ContextualParseError;
+ use parser::{ParserContext, log_css_error, Parse};
+ use selectors::parser::SelectorParseError;
+ use shared_lock::{SharedRwLockReadGuard, ToCssWithGuard};
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::borrow::Cow;
+ use std::fmt;
+ use std::ops::Range;
+diff --git a/servo/components/style/custom_properties.rs b/servo/components/style/custom_properties.rs
+index cb9e39561846..787dfaadf82c 100644
+--- a/servo/components/style/custom_properties.rs
++++ b/servo/components/style/custom_properties.rs
+@@ -12,7 +12,7 @@ use parser::ParserContext;
+ use properties::{CSSWideKeyword, DeclaredValue};
+ use selectors::parser::SelectorParseError;
+ use servo_arc::Arc;
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::borrow::Cow;
+ use std::collections::{HashMap, hash_map, HashSet};
+ use std::fmt;
+diff --git a/servo/components/style/gecko/generated/pseudo_element_definition.rs b/servo/components/style/gecko/generated/pseudo_element_definition.rs
+index 46da69d1e9b6..1cb2bf9f3e1d 100644
+--- a/servo/components/style/gecko/generated/pseudo_element_definition.rs
++++ b/servo/components/style/gecko/generated/pseudo_element_definition.rs
+@@ -1182,7 +1182,7 @@ impl PseudoElement {
+ /// Returns `None` if the pseudo-element is not recognised.
+ #[inline]
+ pub fn from_slice(s: &str, in_ua_stylesheet: bool) -> Option<Self> {
+- use std::ascii::AsciiExt;
++ #[allow(unused_imports)] use std::ascii::AsciiExt;
+
+ // We don't need to support tree pseudos because functional
+ // pseudo-elements needs arguments, and thus should be created
+@@ -1552,7 +1552,7 @@ impl PseudoElement {
+ /// Returns `None` if the pseudo-element is not recognized.
+ #[inline]
+ pub fn tree_pseudo_element(name: &str, args: Box<[String]>) -> Option<Self> {
+- use std::ascii::AsciiExt;
++ #[allow(unused_imports)] use std::ascii::AsciiExt;
+ debug_assert!(name.starts_with("-moz-tree-"));
+ let tree_part = &name[10..];
+ if tree_part.eq_ignore_ascii_case("column") {
+diff --git a/servo/components/style/gecko/pseudo_element_definition.mako.rs b/servo/components/style/gecko/pseudo_element_definition.mako.rs
+index e4a5025314b6..d676cb9f0491 100644
+--- a/servo/components/style/gecko/pseudo_element_definition.mako.rs
++++ b/servo/components/style/gecko/pseudo_element_definition.mako.rs
+@@ -171,7 +171,7 @@ impl PseudoElement {
+ /// Returns `None` if the pseudo-element is not recognised.
+ #[inline]
+ pub fn from_slice(s: &str, in_ua_stylesheet: bool) -> Option<Self> {
+- use std::ascii::AsciiExt;
++ #[allow(unused_imports)] use std::ascii::AsciiExt;
+
+ // We don't need to support tree pseudos because functional
+ // pseudo-elements needs arguments, and thus should be created
+@@ -193,7 +193,7 @@ impl PseudoElement {
+ /// Returns `None` if the pseudo-element is not recognized.
+ #[inline]
+ pub fn tree_pseudo_element(name: &str, args: Box<[String]>) -> Option<Self> {
+- use std::ascii::AsciiExt;
++ #[allow(unused_imports)] use std::ascii::AsciiExt;
+ debug_assert!(name.starts_with("-moz-tree-"));
+ let tree_part = &name[10..];
+ % for pseudo in TREE_PSEUDOS:
+diff --git a/servo/components/style/gecko_string_cache/mod.rs b/servo/components/style/gecko_string_cache/mod.rs
+index fed06fbeec5d..726bbc8631ca 100644
+--- a/servo/components/style/gecko_string_cache/mod.rs
++++ b/servo/components/style/gecko_string_cache/mod.rs
+@@ -13,7 +13,7 @@ use gecko_bindings::bindings::Gecko_ReleaseAtom;
+ use gecko_bindings::structs::nsIAtom;
+ use nsstring::{nsAString, nsString};
+ use precomputed_hash::PrecomputedHash;
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::borrow::{Cow, Borrow};
+ use std::char::{self, DecodeUtf16};
+ use std::fmt::{self, Write};
+diff --git a/servo/components/style/media_queries.rs b/servo/components/style/media_queries.rs
+index 5f71ddf974fb..6667f16f3585 100644
+--- a/servo/components/style/media_queries.rs
++++ b/servo/components/style/media_queries.rs
+@@ -12,7 +12,7 @@ use cssparser::{Delimiter, Parser, Token, ParserInput};
+ use parser::ParserContext;
+ use selectors::parser::SelectorParseError;
+ use serialize_comma_separated_list;
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::fmt;
+ use style_traits::{ToCss, ParseError, StyleParseError};
+
+diff --git a/servo/components/style/properties/longhand/font.mako.rs b/servo/components/style/properties/longhand/font.mako.rs
+index f6b78a917498..093c6c1009e7 100644
+--- a/servo/components/style/properties/longhand/font.mako.rs
++++ b/servo/components/style/properties/longhand/font.mako.rs
+@@ -2096,7 +2096,7 @@ https://drafts.csswg.org/css-fonts-4/#low-level-font-variation-settings-control-
+
+ #[inline]
+ fn to_computed_value(&self, _context: &Context) -> computed_value::T {
+- use std::ascii::AsciiExt;
++ #[allow(unused_imports)] use std::ascii::AsciiExt;
+ match *self {
+ SpecifiedValue::Normal => computed_value::T(0),
+ SpecifiedValue::Override(ref lang) => {
+diff --git a/servo/components/style/properties/longhand/pointing.mako.rs b/servo/components/style/properties/longhand/pointing.mako.rs
+index 9e7923889b17..132e62501647 100644
+--- a/servo/components/style/properties/longhand/pointing.mako.rs
++++ b/servo/components/style/properties/longhand/pointing.mako.rs
+@@ -93,7 +93,7 @@
+ impl Parse for computed_value::Keyword {
+ fn parse<'i, 't>(_context: &ParserContext, input: &mut Parser<'i, 't>)
+ -> Result<computed_value::Keyword, ParseError<'i>> {
+- use std::ascii::AsciiExt;
++ #[allow(unused_imports)] use std::ascii::AsciiExt;
+ use style_traits::cursor::Cursor;
+ let ident = input.expect_ident()?;
+ if ident.eq_ignore_ascii_case("auto") {
+diff --git a/servo/components/style/str.rs b/servo/components/style/str.rs
+index 92febb408249..e4ba90d6435e 100644
+--- a/servo/components/style/str.rs
++++ b/servo/components/style/str.rs
+@@ -7,7 +7,7 @@
+ #![deny(missing_docs)]
+
+ use num_traits::ToPrimitive;
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::convert::AsRef;
+ use std::iter::{Filter, Peekable};
+ use std::str::Split;
+diff --git a/servo/components/style/stylesheets/viewport_rule.rs b/servo/components/style/stylesheets/viewport_rule.rs
+index 7d3339a92148..ad57415cbc90 100644
+--- a/servo/components/style/stylesheets/viewport_rule.rs
++++ b/servo/components/style/stylesheets/viewport_rule.rs
+@@ -19,7 +19,7 @@ use parser::{Parse, ParserContext, log_css_error};
+ use properties::StyleBuilder;
+ use selectors::parser::SelectorParseError;
+ use shared_lock::{SharedRwLockReadGuard, ToCssWithGuard};
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::borrow::Cow;
+ use std::fmt;
+ use std::iter::Enumerate;
+diff --git a/servo/components/style/values/mod.rs b/servo/components/style/values/mod.rs
+index 616aa5cb4852..0ea4759ff23e 100644
+--- a/servo/components/style/values/mod.rs
++++ b/servo/components/style/values/mod.rs
+@@ -12,7 +12,7 @@ use Atom;
+ pub use cssparser::{RGBA, Token, Parser, serialize_identifier, BasicParseError, CowRcStr};
+ use parser::{Parse, ParserContext};
+ use selectors::parser::SelectorParseError;
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::fmt::{self, Debug};
+ use std::hash;
+ use style_traits::{ToCss, ParseError, StyleParseError};
+diff --git a/servo/components/style/values/specified/align.rs b/servo/components/style/values/specified/align.rs
+index dc7fd43ed941..10da78904e2b 100644
+--- a/servo/components/style/values/specified/align.rs
++++ b/servo/components/style/values/specified/align.rs
+@@ -10,7 +10,7 @@ use cssparser::Parser;
+ use gecko_bindings::structs;
+ use parser::{Parse, ParserContext};
+ use selectors::parser::SelectorParseError;
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::fmt;
+ use style_traits::{ToCss, ParseError, StyleParseError};
+
+diff --git a/servo/components/style/values/specified/calc.rs b/servo/components/style/values/specified/calc.rs
+index 66b94b20ad01..58d12fe0147e 100644
+--- a/servo/components/style/values/specified/calc.rs
++++ b/servo/components/style/values/specified/calc.rs
+@@ -9,7 +9,7 @@
+ use app_units::Au;
+ use cssparser::{Parser, Token, BasicParseError};
+ use parser::ParserContext;
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::fmt;
+ use style_traits::{HasViewportPercentage, ToCss, ParseError, StyleParseError};
+ use style_traits::values::specified::AllowedLengthType;
+diff --git a/servo/components/style/values/specified/grid.rs b/servo/components/style/values/specified/grid.rs
+index beb1459e76dc..927b8c912935 100644
+--- a/servo/components/style/values/specified/grid.rs
++++ b/servo/components/style/values/specified/grid.rs
+@@ -7,7 +7,7 @@
+
+ use cssparser::{Parser, Token, BasicParseError};
+ use parser::{Parse, ParserContext};
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::mem;
+ use style_traits::{HasViewportPercentage, ParseError, StyleParseError};
+ use values::{CSSFloat, CustomIdent};
+diff --git a/servo/components/style/values/specified/length.rs b/servo/components/style/values/specified/length.rs
+index bf4b83b52932..2514b2aaca89 100644
+--- a/servo/components/style/values/specified/length.rs
++++ b/servo/components/style/values/specified/length.rs
+@@ -12,7 +12,7 @@ use euclid::Size2D;
+ use font_metrics::FontMetricsQueryResult;
+ use parser::{Parse, ParserContext};
+ use std::{cmp, fmt, mem};
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::ops::Mul;
+ use style_traits::{HasViewportPercentage, ToCss, ParseError, StyleParseError};
+ use style_traits::values::specified::{AllowedLengthType, AllowedNumericType};
+diff --git a/servo/components/style/values/specified/mod.rs b/servo/components/style/values/specified/mod.rs
+index 7c51c3868f8a..8fbdc827829a 100644
+--- a/servo/components/style/values/specified/mod.rs
++++ b/servo/components/style/values/specified/mod.rs
+@@ -11,7 +11,7 @@ use context::QuirksMode;
+ use cssparser::{Parser, Token, serialize_identifier, BasicParseError};
+ use parser::{ParserContext, Parse};
+ use self::url::SpecifiedUrl;
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::f32;
+ use std::fmt;
+ use style_traits::{ToCss, ParseError, StyleParseError};
+diff --git a/servo/components/style/values/specified/text.rs b/servo/components/style/values/specified/text.rs
+index 2c0395128c64..c3248a7bc45d 100644
+--- a/servo/components/style/values/specified/text.rs
++++ b/servo/components/style/values/specified/text.rs
+@@ -7,7 +7,7 @@
+ use cssparser::Parser;
+ use parser::{Parse, ParserContext};
+ use selectors::parser::SelectorParseError;
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use style_traits::ParseError;
+ use values::computed::{Context, ToComputedValue};
+ use values::computed::text::LineHeight as ComputedLineHeight;
+diff --git a/servo/components/style_traits/viewport.rs b/servo/components/style_traits/viewport.rs
+index 01d9b541ac34..e25ff9ba9e71 100644
+--- a/servo/components/style_traits/viewport.rs
++++ b/servo/components/style_traits/viewport.rs
+@@ -7,7 +7,7 @@
+ use {CSSPixel, PinchZoomFactor, ParseError};
+ use cssparser::{Parser, ToCss, ParseError as CssParseError, BasicParseError};
+ use euclid::TypedSize2D;
+-use std::ascii::AsciiExt;
++#[allow(unused_imports)] use std::ascii::AsciiExt;
+ use std::fmt;
+
+ define_css_keyword_enum!(UserZoom:
+
+From abb937e8e0284e65ef102807905d6e1136c98cd8 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= <emilio@crisal.io>
+Date: Wed, 3 Jan 2018 12:01:42 -0600
+Subject: [PATCH 08/16] servo: Merge #19654 - style: Allow building stylo with
+ rust nightly (from emilio:geckolib-nightly); r=jdm
+
+See individual commits for details.
+
+Source-Repo: https://github.com/servo/servo
+Source-Revision: f71fb8bddc28060320c233701898541112322d66
+
+(cherry picked from commit mozilla/gecko-dev@61f3d7e4e83b)
+---
+ servo/components/style/gecko/wrapper.rs | 2 +-
+ servo/components/style/gecko_bindings/sugar/ownership.rs | 1 -
+ 2 files changed, 1 insertion(+), 2 deletions(-)
+
+diff --git a/servo/components/style/gecko/wrapper.rs b/servo/components/style/gecko/wrapper.rs
+index 5ad9668540d4..cbff3e8a962b 100644
+--- a/servo/components/style/gecko/wrapper.rs
++++ b/servo/components/style/gecko/wrapper.rs
+@@ -1403,7 +1403,7 @@ impl<'le> Eq for GeckoElement<'le> {}
+
+ impl<'le> Hash for GeckoElement<'le> {
+ fn hash<H: Hasher>(&self, state: &mut H) {
+- (self.0 as *const _).hash(state);
++ (self.0 as *const RawGeckoElement).hash(state);
+ }
+ }
+
+diff --git a/servo/components/style/gecko_bindings/sugar/ownership.rs b/servo/components/style/gecko_bindings/sugar/ownership.rs
+index b0ac00368eae..8695efaaa40f 100644
+--- a/servo/components/style/gecko_bindings/sugar/ownership.rs
++++ b/servo/components/style/gecko_bindings/sugar/ownership.rs
+@@ -109,7 +109,6 @@ pub unsafe trait HasArcFFI : HasFFI {
+ ///
+ /// &GeckoType -> &Arc<ServoType>
+ fn as_arc<'a>(ptr: &'a &Self::FFIType) -> &'a RawOffsetArc<Self> {
+- debug_assert!(!(ptr as *const _).is_null());
+ unsafe {
+ transmute::<&&Self::FFIType, &RawOffsetArc<Self>>(ptr)
+ }
+
+From 835930f339eef0b2f02403ea0473e9fd7586e250 Mon Sep 17 00:00:00 2001
+From: Simon Sapin <simon.sapin@exyr.org>
+Date: Wed, 31 Jan 2018 11:01:26 -0600
+Subject: [PATCH 09/16] Bug 1434619 - servo: Remove #![deny(warnings)]. r=nox,
+ a=lizzard
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+We already have https://github.com/servo/servo/pull/19612 to deny warnings at the time of landing into master. But it’s not useful to break the build when later compiler with a more recent Rust version that has introduced new warnings:
+
+Source-Repo: https://github.com/servo/servo
+Source-Revision: 7546c37f1e921a112fef5828c59c6738a98c3f30
+
+(cherry picked from commit mozilla/gecko-dev@95a1778f4ef0)
+---
+ servo/components/style/gecko_bindings/nsstring_vendor/src/lib.rs | 1 -
+ servo/components/style/lib.rs | 1 -
+ servo/ports/geckolib/lib.rs | 1 -
+ 3 files changed, 3 deletions(-)
+
+diff --git a/servo/components/style/gecko_bindings/nsstring_vendor/src/lib.rs b/servo/components/style/gecko_bindings/nsstring_vendor/src/lib.rs
+index 385fe5f24dac..45ae44a25830 100644
+--- a/servo/components/style/gecko_bindings/nsstring_vendor/src/lib.rs
++++ b/servo/components/style/gecko_bindings/nsstring_vendor/src/lib.rs
+@@ -117,7 +117,6 @@
+ //! which invoke their member's destructors through C++ code.
+
+ #![allow(non_camel_case_types)]
+-#![deny(warnings)]
+
+ use std::ops::{Deref, DerefMut};
+ use std::marker::PhantomData;
+diff --git a/servo/components/style/lib.rs b/servo/components/style/lib.rs
+index b82d2fd3cc0a..69ec8c6b589d 100644
+--- a/servo/components/style/lib.rs
++++ b/servo/components/style/lib.rs
+@@ -23,7 +23,6 @@
+ //! [cssparser]: ../cssparser/index.html
+ //! [selectors]: ../selectors/index.html
+
+-#![deny(warnings)]
+ #![deny(missing_docs)]
+
+ // FIXME(bholley): We need to blanket-allow unsafe code in order to make the
+diff --git a/servo/ports/geckolib/lib.rs b/servo/ports/geckolib/lib.rs
+index 37f33245656e..b50147cc2bbd 100644
+--- a/servo/ports/geckolib/lib.rs
++++ b/servo/ports/geckolib/lib.rs
+@@ -2,7 +2,6 @@
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+-#![deny(warnings)]
+
+ extern crate atomic_refcell;
+ extern crate cssparser;
+
+From b0f07e9a204324f18444fae3bcc534a847df4e3c Mon Sep 17 00:00:00 2001
+From: Jan Beich <jbeich@FreeBSD.org>
+Date: Fri, 20 Oct 2017 03:38:00 -0400
+Subject: [PATCH 10/16] Bug 1409680 - Extend --disable-debug-symbols to Rust
+ code. r=glandium, a=ritu
+
+This reduces disk I/O and memory usage during build that already lacks
+debugging symbols from C++ code, allowing to use more jobs on 32bit hosts.
+
+--disable-debug-symbols build on FreeBSD 10.3 i386 (8 cores) host:
+Max RSS before: libxul - 612 Mb, libgkrust - 1908 Mb
+Max RSS after: libxul - 444 Mb, libgkrust - 1471 Mb
+Binary before: libxul - 203 Mb, libgkrust - 732 Mb
+Binary after: libxul - 123 Mb, libgkrust - 301 Mb
+
+(cherry picked from commit mozilla/gecko-dev@b0d22972325b)
+---
+ config/rules.mk | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/config/rules.mk b/config/rules.mk
+index f64e67c78c7f..00b64bdb8cf4 100644
+--- a/config/rules.mk
++++ b/config/rules.mk
+@@ -906,12 +906,14 @@ ifdef MOZ_USING_SCCACHE
+ sccache_wrap := RUSTC_WRAPPER='$(CCACHE)'
+ endif
+
++ifdef MOZ_DEBUG_SYMBOLS
+ # XXX hack to work around dsymutil failing on cross-OSX builds (bug 1380381)
+ ifeq ($(HOST_OS_ARCH)-$(OS_ARCH),Linux-Darwin)
+ default_rustflags += -C debuginfo=1
+ else
+ default_rustflags += -C debuginfo=2
+ endif
++endif
+
+ # We use the + prefix to pass down the jobserver fds to cargo, but we
+ # don't use the prefix when make -n is used, so that cargo doesn't run
+
+From e4c7440f95be25c8c6a9b1a4e6ec005dda9137cd Mon Sep 17 00:00:00 2001
+From: Nathan Froyd <froydnj@mozilla.com>
+Date: Fri, 10 Nov 2017 10:05:36 -0500
+Subject: [PATCH 11/16] Bug 1341234 - part 0 - fix typo in AC_SUBST_SET
+ checking; r=gps
+
+The various AC_SUBST macros generate AC_SUBST_*FOO macros for holding the
+values to substitute. The macros also cross-check the AC_SUBST_* macros
+generated by other variants to make sure that you don't try to do
+something like AC_SUBST(FOO) and AC_SUBST_SET(FOO). However, the check
+in AC_SUBST_SET for AC_SUBST_LIST duplicate is missing an underscore:
+the AC_SUBST_LIST macro generates another macro starting with
+AC_SUBST_LIST_, but the AC_SUBST_SET macro checks for the prefix
+AC_SUBST_LIST, which is missing the trailing underscore.
+
+As we're going to be adding yet another AC_SUBST_* macro variant, and
+therefore adding more checks to all existing macros, let's clean this up
+before we start.
+
+(cherry picked from commit mozilla/gecko-dev@1009160a12a7)
+---
+ build/autoconf/config.status.m4 | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/build/autoconf/config.status.m4 b/build/autoconf/config.status.m4
+index 53e274a12196..eb1fd3a13a42 100644
+--- a/build/autoconf/config.status.m4
++++ b/build/autoconf/config.status.m4
+@@ -24,7 +24,7 @@ dnl with values got from the value of the environment variable, split on
+ dnl whitespaces.
+ define([AC_SUBST_SET],
+ [ifdef([AC_SUBST_$1], [m4_fatal([Cannot use AC_SUBST and AC_SUBST_SET on the same variable ($1)])],
+-[ifdef([AC_SUBST_LIST$1], [m4_fatal([Cannot use AC_SUBST_LIST and AC_SUBST_SET on the same variable ($1)])],
++[ifdef([AC_SUBST_LIST_$1], [m4_fatal([Cannot use AC_SUBST_LIST and AC_SUBST_SET on the same variable ($1)])],
+ [ifdef([AC_SUBST_SET_$1], ,
+ [define([AC_SUBST_SET_$1], )dnl
+ AC_DIVERT_PUSH(MOZ_DIVERSION_SUBST)dnl
+
+From d4d7da8f69ddc749349ff4c0c5a141cf62ccc027 Mon Sep 17 00:00:00 2001
+From: Nathan Froyd <froydnj@mozilla.com>
+Date: Fri, 10 Nov 2017 10:05:36 -0500
+Subject: [PATCH 12/16] Bug 1341234 - part 1 - add AC_SUBST_TOML_LIST macro;
+ r=gps
+
+Stylo's bindgen is configured partially through a .toml.in file that
+substitutes the value of a configure variable (BINDGEN_CFLAGS) into a
+TOML list. We can debate whether this is a good thing to do some other
+time; the reality is that the current moz.configure code that provides
+the set_config for BINDGEN_CFLAGS needs to perform all the quoting
+itself.
+
+We want, however, to define the substituted variable in old-configure.in
+land (some of the values that will go into BINDGEN_CFLAGS are only
+defined in old-configure.in, and are not trivially ported to
+moz.configure), which means that we need to have quoting logic in
+m4/Python when we generate config.status. This patch adds an
+appropriate macro for doing so.
+
+(cherry picked from commit mozilla/gecko-dev@380dc56df216)
+---
+ build/autoconf/config.status.m4 | 25 ++++++++++++++++++++++---
+ 1 file changed, 22 insertions(+), 3 deletions(-)
+
+diff --git a/build/autoconf/config.status.m4 b/build/autoconf/config.status.m4
+index eb1fd3a13a42..0c0fbc76178c 100644
+--- a/build/autoconf/config.status.m4
++++ b/build/autoconf/config.status.m4
+@@ -12,12 +12,13 @@ dnl AC_SOMETHING(foo,AC_SUBST(),bar)
+ define([AC_SUBST],
+ [ifdef([AC_SUBST_SET_$1], [m4_fatal([Cannot use AC_SUBST and AC_SUBST_SET on the same variable ($1)])],
+ [ifdef([AC_SUBST_LIST_$1], [m4_fatal([Cannot use AC_SUBST and AC_SUBST_LIST on the same variable ($1)])],
++[ifdef([AC_SUBST_TOML_LIST_$1], [m4_fatal([Cannot use AC_SUBST and AC_SUBST_TOML_LIST on the same variable ($1)])],
+ [ifdef([AC_SUBST_$1], ,
+ [define([AC_SUBST_$1], )dnl
+ AC_DIVERT_PUSH(MOZ_DIVERSION_SUBST)dnl
+ (''' $1 ''', r''' [$]$1 ''')
+ AC_DIVERT_POP()dnl
+-])])])])
++])])])])])
+
+ dnl Like AC_SUBST, but makes the value available as a set in python,
+ dnl with values got from the value of the environment variable, split on
+@@ -25,12 +26,13 @@ dnl whitespaces.
+ define([AC_SUBST_SET],
+ [ifdef([AC_SUBST_$1], [m4_fatal([Cannot use AC_SUBST and AC_SUBST_SET on the same variable ($1)])],
+ [ifdef([AC_SUBST_LIST_$1], [m4_fatal([Cannot use AC_SUBST_LIST and AC_SUBST_SET on the same variable ($1)])],
++[ifdef([AC_SUBST_TOML_LIST_$1], [m4_fatal([Cannot use AC_SUBST_TOML_LIST and AC_SUBST_SET on the same variable ($1)])],
+ [ifdef([AC_SUBST_SET_$1], ,
+ [define([AC_SUBST_SET_$1], )dnl
+ AC_DIVERT_PUSH(MOZ_DIVERSION_SUBST)dnl
+ (''' $1 ''', unique_list(r''' [$]$1 '''.split()))
+ AC_DIVERT_POP()dnl
+-])])])])
++])])])])])
+
+ dnl Like AC_SUBST, but makes the value available as a list in python,
+ dnl with values got from the value of the environment variable, split on
+@@ -38,12 +40,29 @@ dnl whitespaces.
+ define([AC_SUBST_LIST],
+ [ifdef([AC_SUBST_$1], [m4_fatal([Cannot use AC_SUBST and AC_SUBST_LIST on the same variable ($1)])],
+ [ifdef([AC_SUBST_SET_$1], [m4_fatal([Cannot use AC_SUBST_SET and AC_SUBST_LIST on the same variable ($1)])],
++[ifdef([AC_SUBST_TOML_LIST_$1], [m4_fatal([Cannot use AC_SUBST_TOML_LIST and AC_SUBST_LIST on the same variable ($1)])],
+ [ifdef([AC_SUBST_LIST_$1], ,
+ [define([AC_SUBST_LIST_$1], )dnl
+ AC_DIVERT_PUSH(MOZ_DIVERSION_SUBST)dnl
+ (''' $1 ''', list(r''' [$]$1 '''.split()))
+ AC_DIVERT_POP()dnl
+-])])])])
++])])])])])
++
++dnl Like AC_SUBST, but makes the value available as a string of comma-separated
++dnl quoted strings in python, with values got from the value of the environment
++dnl variable, split on whitespaces. The value is suitable for embedding into a
++dnl .toml list.
++define([AC_SUBST_TOML_LIST],
++[ifdef([AC_SUBST_$1], [m4_fatal([Cannot use AC_SUBST and AC_SUBST_TOML_LIST on the same variable ($1)])],
++[ifdef([AC_SUBST_SET_$1], [m4_fatal([Cannot use AC_SUBST_SET and AC_SUBST_TOML_LIST on the same variable ($1)])],
++[ifdef([AC_SUBST_LIST_$1], [m4_fatal([Cannot use AC_SUBST_LIST and AC_SUBST_TOML_LIST on the same variable ($1)])],
++[ifdef([AC_SUBST_TOML_LIST_$1], ,
++[define([AC_SUBST_TOML_LIST_$1], )dnl
++AC_DIVERT_PUSH(MOZ_DIVERSION_SUBST)dnl
++ (''' $1 ''', r''' %s ''' % str(', '.join("'%s'" % s for s in r''' [$]$1 '''.split())))
++AC_DIVERT_POP()dnl
++])])])])])
++
+
+ dnl Ignore AC_SUBSTs for variables we don't have use for but that autoconf
+ dnl itself exports.
+
+From 3d6c7660f7632606b3dd64c5676aea20674b1da3 Mon Sep 17 00:00:00 2001
+From: Nathan Froyd <froydnj@mozilla.com>
+Date: Fri, 10 Nov 2017 10:05:36 -0500
+Subject: [PATCH 13/16] Bug 1341234 - part 2 - add an intermediate step for
+ determining bindgen's CFLAGS; r=gps
+
+Add an intermediate step in old-configure.in for setting up
+BINDGEN_CFLAGS (renamed to BINDGEN_SYSTEM_FLAGS), so we can add whatever
+flags we like (e.g. for system libaries with their includes in
+non-standard places) at a later point.
+
+(cherry picked from commit mozilla/gecko-dev@17b61015519a)
+---
+ build/moz.configure/toolchain.configure | 9 +++------
+ layout/style/bindgen.toml.in | 2 +-
+ old-configure.in | 3 +++
+ 3 files changed, 7 insertions(+), 7 deletions(-)
+
+diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
+index f63c81d8fc75..fadd11225508 100755
+--- a/build/moz.configure/toolchain.configure
++++ b/build/moz.configure/toolchain.configure
+@@ -914,15 +914,12 @@ option(env='BINDGEN_CFLAGS',
+ help='Options bindgen should pass to the C/C++ parser')
+
+ @depends('BINDGEN_CFLAGS')
+-@checking('bindgen cflags', lambda s: s if s and s.strip() else 'no')
++@checking('bindgen cflags', lambda s: s if s else 'no')
+ def bindgen_cflags(value):
+ if value and len(value):
+- # Reformat the env value for substitution into a toml list.
+- flags = value[0].split()
+- return ', '.join('"' + flag + '"' for flag in flags)
+- return ''
++ return value[0].split()
+
+-set_config('BINDGEN_CFLAGS', bindgen_cflags)
++add_old_configure_assignment('_BINDGEN_CFLAGS', bindgen_cflags)
+
+ @depends(c_compiler)
+ def default_debug_flags(compiler_info):
+diff --git a/layout/style/bindgen.toml.in b/layout/style/bindgen.toml.in
+index 7b1c72c86ec7..894008d0cfb6 100644
+--- a/layout/style/bindgen.toml.in
++++ b/layout/style/bindgen.toml.in
+@@ -1,4 +1,4 @@
+ [build]
+ args = [
+- @BINDGEN_CFLAGS@
++ @BINDGEN_SYSTEM_FLAGS@
+ ]
+diff --git a/old-configure.in b/old-configure.in
+index ab57a0fbb11e..8a3ed4fdba40 100644
+--- a/old-configure.in
++++ b/old-configure.in
+@@ -4519,6 +4519,9 @@ AC_SUBST_LIST(MOZ_CAIRO_LIBS)
+ AC_SUBST_LIST(MOZ_CAIRO_OSLIBS)
+ AC_SUBST(MOZ_TREE_PIXMAN)
+
++BINDGEN_SYSTEM_FLAGS="$_BINDGEN_CFLAGS"
++AC_SUBST_TOML_LIST(BINDGEN_SYSTEM_FLAGS)
++
+ dnl ========================================================
+ dnl disable xul
+ dnl ========================================================
+
+From 7ca173a9ddefe42e2d4aaff65d457d7c3f931e58 Mon Sep 17 00:00:00 2001
+From: Nathan Froyd <froydnj@mozilla.com>
+Date: Fri, 10 Nov 2017 10:05:36 -0500
+Subject: [PATCH 14/16] Bug 1341234 - part 3 - add various system library
+ CFLAGS to BINDGEN_SYSTEM_FLAGS; r=gps
+
+This change ensures that folks who configure --with-system-FOO for
+various values of FOO can build Stylo, since bindgen will know where to
+find the flags for said FOO packages.
+
+(cherry picked from commit mozilla/gecko-dev@4d60ad6f6676)
+---
+ old-configure.in | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/old-configure.in b/old-configure.in
+index 8a3ed4fdba40..3130f8c076b7 100644
+--- a/old-configure.in
++++ b/old-configure.in
+@@ -4519,7 +4519,7 @@ AC_SUBST_LIST(MOZ_CAIRO_LIBS)
+ AC_SUBST_LIST(MOZ_CAIRO_OSLIBS)
+ AC_SUBST(MOZ_TREE_PIXMAN)
+
+-BINDGEN_SYSTEM_FLAGS="$_BINDGEN_CFLAGS"
++BINDGEN_SYSTEM_FLAGS="$_BINDGEN_CFLAGS $NSPR_CFLAGS $NSS_CFLAGS $MOZ_PIXMAN_CFLAGS $MOZ_CAIRO_CFLAGS"
+ AC_SUBST_TOML_LIST(BINDGEN_SYSTEM_FLAGS)
+
+ dnl ========================================================
+
+From 5af00ea6a02f7f23152fcd2e1d443ab73266790c Mon Sep 17 00:00:00 2001
+From: Matt Brubeck <mbrubeck@mozilla.com>
+Date: Thu, 10 Aug 2017 11:38:10 -0700
+Subject: [PATCH 15/16] Bug 1386371 - Disable LTO by default, but enable in
+ automation. r=froydnj
+
+(cherry picked from commit mozilla/gecko-dev@503070ad8daa)
+---
+ build/moz.configure/toolchain.configure | 1 +
+ config/rules.mk | 14 ++++++++++++--
+ python/mozbuild/mozbuild/frontend/emitter.py | 1 -
+ toolkit/library/gtest/rust/Cargo.toml | 1 -
+ toolkit/library/rust/Cargo.toml | 1 -
+ 5 files changed, 13 insertions(+), 5 deletions(-)
+
+diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
+index fadd11225508..dd97bdbe4088 100755
+--- a/build/moz.configure/toolchain.configure
++++ b/build/moz.configure/toolchain.configure
+@@ -1097,6 +1097,7 @@ def developer_options(value):
+ return True
+
+ add_old_configure_assignment('DEVELOPER_OPTIONS', developer_options)
++set_config('DEVELOPER_OPTIONS', developer_options)
+
+ # Linker detection
+ # ==============================================================
+diff --git a/config/rules.mk b/config/rules.mk
+index 00b64bdb8cf4..add8cc74b3a9 100644
+--- a/config/rules.mk
++++ b/config/rules.mk
+@@ -862,6 +862,16 @@ cargo_build_flags += --color=always
+ endif
+ endif
+
++# These flags are passed via `cargo rustc` and only apply to the final rustc
++# invocation (i.e., only the top-level crate, not its dependencies).
++cargo_rustc_flags = $(CARGO_RUSTCFLAGS)
++ifndef DEVELOPER_OPTIONS
++ifndef MOZ_DEBUG_RUST
++# Enable link-time optimization for release builds.
++cargo_rustc_flags += -C lto
++endif
++endif
++
+ # Cargo currently supports only two interesting profiles for building:
+ # development and release. Those map (roughly) to --enable-debug and
+ # --disable-debug in Gecko, respectively, but there's another axis that we'd
+@@ -941,7 +951,7 @@ endef
+ #
+ # $(call CARGO_BUILD)
+ define CARGO_BUILD
+-$(call RUN_CARGO,build,$(1))
++$(call RUN_CARGO,rustc,$(1))
+ endef
+
+ define CARGO_CHECK
+@@ -986,7 +996,7 @@ endif
+ # build.
+ force-cargo-library-build:
+ $(REPORT_BUILD)
+- $(call CARGO_BUILD,$(target_cargo_env_vars)) --lib $(cargo_target_flag) $(rust_features_flag)
++ $(call CARGO_BUILD,$(target_cargo_env_vars)) --lib $(cargo_target_flag) $(rust_features_flag) -- $(cargo_rustc_flags)
+
+ $(RUST_LIBRARY_FILE): force-cargo-library-build
+
+diff --git a/python/mozbuild/mozbuild/frontend/emitter.py b/python/mozbuild/mozbuild/frontend/emitter.py
+index 815126d145b3..07a33caca893 100644
+--- a/python/mozbuild/mozbuild/frontend/emitter.py
++++ b/python/mozbuild/mozbuild/frontend/emitter.py
+@@ -480,7 +480,6 @@ def _rust_library(self, context, libname, static_args, cls=RustLibrary):
+ expected_profile = {
+ 'opt-level': 2,
+ 'rpath': False,
+- 'lto': True,
+ 'debug-assertions': False,
+ 'panic': 'abort',
+ }
+diff --git a/toolkit/library/gtest/rust/Cargo.toml b/toolkit/library/gtest/rust/Cargo.toml
+index a7a64486c684..c9f942c88033 100644
+--- a/toolkit/library/gtest/rust/Cargo.toml
++++ b/toolkit/library/gtest/rust/Cargo.toml
+@@ -42,6 +42,5 @@ panic = "abort"
+ [profile.release]
+ opt-level = 2
+ rpath = false
+-lto = true
+ debug-assertions = false
+ panic = "abort"
+diff --git a/toolkit/library/rust/Cargo.toml b/toolkit/library/rust/Cargo.toml
+index f67669513d38..fd5668729199 100644
+--- a/toolkit/library/rust/Cargo.toml
++++ b/toolkit/library/rust/Cargo.toml
+@@ -40,6 +40,5 @@ panic = "abort"
+ [profile.release]
+ opt-level = 2
+ rpath = false
+-lto = true
+ debug-assertions = false
+ panic = "abort"
+
+From 3485a92a94ab4b5e4a4a21c7faf0c840039c08f2 Mon Sep 17 00:00:00 2001
+From: Jan Beich <jbeich@FreeBSD.org>
+Date: Wed, 4 Apr 2018 13:49:31 +0000
+Subject: [PATCH 16/16] Enable Rust optimizations
+
+---
+ .mozconfig | 2 ++
+ 1 file changed, 2 insertions(+)
+
+