diff options
author | hawkeye116477 | 2018-04-10 20:39:23 +0200 |
---|---|---|
committer | hawkeye116477 | 2018-04-10 20:39:23 +0200 |
commit | a962a5bae1ea32c9ff23e7eca9e70e44b2b4b016 (patch) | |
tree | d4328aaccc5cb2c0c67aee40416374546866354f | |
parent | 4cdc460221668323d2d690cb9a7aaa515e24ecee (diff) | |
download | aur-a962a5bae1ea32c9ff23e7eca9e70e44b2b4b016.tar.gz |
Fix Rust issues
-rw-r--r-- | PKGBUILD | 13 | ||||
-rw-r--r-- | new_rust.patch | 2336 |
2 files changed, 2346 insertions, 3 deletions
@@ -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(+) + + |