Closed
Description
UPDATE by @nikomatsakis: In the original issue below, @SimonSapin found several issues when building servo. The goal now is to isolate those issues into standalone test cases and investigate them. Mentoring instructions for doing that isolation can be found here.
The list of tests to be isolated is:
- url-1.6.0 -- isolated to NLL: error from URL crate #47703 by @Aaron1011 !
- getopts-0.2.14 -- isolated to NLL: error from get-opts crate #47707 by @lqd
- atomic_refcell-0.1.0 -- isolated also to NLL: error from URL crate #47703 by @lqd
- mozjs-0.1.10 -- isolated to [nll] compilation error from mozjs-0.1.10 #47722 by @lqd
Original issue report
How I got these results:
- Check out servo/servo@726a185 (currently master)
- Run
cargo +nightly-2018-01-19 build
, see that it finishes successfull - Run
RUST_BACKTRACE=1 RUSTFLAGS=-Znll cargo +nightly-2018-01-19 build -j100 -v
repeatedly (because when one crate fails Cargo stops building more crates) until the output stabilizes. This results in three borrow-checking errors below, and one ICE filed separately at ICE with NLL: 'assertion failed: identity_substs.is_empty()', librustc_mir/borrow_check/nll/universal_regions.rs:593:17 #47598.
The relevant code is from crates.io, so easier steps to reproduce might be to build the same crate outside of Servo. And these errors would probably be caught by crater, so they might be already known.
error[E0597]: `*orig.value` does not live long enough
--> /home/simon/.cargo/registry/src/github.com-1ecc6299db9ec823/atomic_refcell-0.1.0/src/lib.rs:309:22
|
309 | value: f(orig.value),
| ^^^^^^^^^^ borrowed value does not live long enough
...
312 | }
| - borrowed value only lives until here
|
= note: borrowed value must be valid for lifetime '_#3r...
error: aborting due to previous error
error: Could not compile `atomic_refcell`.
Caused by:
process didn't exit successfully: `rustc --crate-name atomic_refcell /home/simon/.cargo/registry/src/github.com-1ecc6299db9ec823/atomic_refcell-0.1.0/src/lib.rs --crate-type lib --emit=dep-info,link -C debuginfo=2 -C metadata=2c09db59a67c03f8 -C extra-filename=-2c09db59a67c03f8 --out-dir /home/simon/servo/target/debug/deps -L dependency=/home/simon/servo/target/debug/deps --cap-lints allow -Znll` (exit code: 101)
warning: build failed, waiting for other jobs to finish...
error[E0503]: cannot use `state` because it was mutably borrowed
--> /home/simon/.cargo/registry/src/github.com-1ecc6299db9ec823/getopts-0.2.14/src/lib.rs:1008:33
|
955 | let mut machine = |cont: &mut bool, (i, c): (usize, char)| {
| _______________________-
956 | | let whitespace = if c.is_whitespace() { Ws } else { Cr };
957 | | let limit = if (i - slice_start + 1) <= lim { UnderLim } else { OverLim };
958 | |
... |
1002 | | *cont
1003 | | };
| |_____- borrow of `state` occurs here
...
1008 | while cont && match state { B | C => true, A => false } {
| ^ use of borrowed `state`
error: aborting due to previous error
error: Could not compile `getopts`.
Caused by:
process didn't exit successfully: `rustc --crate-name getopts /home/simon/.cargo/registry/src/github.com-1ecc6299db9ec823/getopts-0.2.14/src/lib.rs --crate-type lib --emit=dep-info,link -C debuginfo=2 -C metadata=3a72542378e72657 -C extra-filename=-3a72542378e72657 --out-dir /home/simon/servo/target/debug/deps -L dependency=/home/simon/servo/target/debug/deps --cap-lints allow -Znll` (exit code: 101)
warning: build failed, waiting for other jobs to finish...
error[E0597]: `*self.url` does not live long enough
--> /home/simon/.cargo/registry/src/github.com-1ecc6299db9ec823/url-1.6.0/src/form_urlencoded.rs:261:40
|
261 | fn finish(self) -> &'a mut ::Url { self.url }
| ^^^^^^^^ - borrowed value only lives until here
| |
| borrowed value does not live long enough
|
= note: borrowed value must be valid for lifetime '_#3r...
error: aborting due to previous error
error: Could not compile `url`.
Caused by:
process didn't exit successfully: `rustc --crate-name url /home/simon/.cargo/registry/src/github.com-1ecc6299db9ec823/url-1.6.0/src/lib.rs --crate-type lib --emit=dep-info,link -C debuginfo=2 -C metadata=d10e0ca03d0b9ab8 -C extra-filename=-d10e0ca03d0b9ab8 --out-dir /home/simon/servo/target/debug/deps -L dependency=/home/simon/servo/target/debug/deps --extern idna=/home/simon/servo/target/debug/deps/libidna-ee1a4ff6e79abeee.rlib --extern matches=/home/simon/servo/target/debug/deps/libmatches-41f6731261a42312.rlib --extern percent_encoding=/home/simon/servo/target/debug/deps/libpercent_encoding-5b0f452077b83df8.rlib --cap-lints allow -Znll` (exit code: 101)
error[E0506]: cannot assign to `*self.stackTop` because it is borrowed
--> /home/simon/.cargo/registry/src/github.com-1ecc6299db9ec823/mozjs-0.1.10/src/rust.rs:524:9
|
524 | *self.stackTop = self;
| ^^^^^^^^^^^^^^^^^----
| | |
| | borrow of `*self.stackTop` occurs here
| assignment to borrowed `*self.stackTop` occurs here
error: aborting due to previous error
error: Could not compile `mozjs`.
Caused by:
process didn't exit successfully: `rustc --crate-name mozjs /home/simon/.cargo/registry/src/github.com-1ecc6299db9ec823/mozjs-0.1.10/src/lib.rs --crate-type lib --emit=dep-info,link -C debuginfo=2 --cfg feature="mozjs_sys" --cfg feature="promises" -C metadata=8e35027187093d35 -C extra-filename=-8e35027187093d35 --out-dir /home/simon/servo/target/debug/deps -L dependency=/home/simon/servo/target/debug/deps --extern libc=/home/simon/servo/target/debug/deps/liblibc-b118c84ee3630a2a.rlib --extern mozjs_sys=/home/simon/servo/target/debug/deps/libmozjs_sys-d53c511cbe7b3779.rlib --extern lazy_static=/home/simon/servo/target/debug/deps/liblazy_static-72140f6120427c36.rlib --extern log=/home/simon/servo/target/debug/deps/liblog-ae6a67986025a716.rlib --extern num_traits=/home/simon/servo/target/debug/deps/libnum_traits-e126d3e7dde5d2ac.rlib --cap-lints allow -Znll -L native=/home/simon/servo/target/debug/build/mozjs-fe9b4a432325640f/out/lib -l static=jsglue -L native=/home/simon/servo/target/debug/build/mozjs_sys-8afe9ad964841801/out/js/src -L native=/usr/lib/x86_64-linux-gnu` (exit code: 101)