[INFO] cloning repository https://github.com/Nashenas88/borrow_visualizer_prototype [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/Nashenas88/borrow_visualizer_prototype" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FNashenas88%2Fborrow_visualizer_prototype", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FNashenas88%2Fborrow_visualizer_prototype'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 00b683757d969f5e6c934cb8af14bec4c95b17ec [INFO] checking Nashenas88/borrow_visualizer_prototype against master#506512391b1a75ae450d36c9420978402a91abcc for pr-125384 [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FNashenas88%2Fborrow_visualizer_prototype" "/workspace/builds/worker-4-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-4-tc1/source'... [INFO] [stderr] done. [INFO] validating manifest of git repo https://github.com/Nashenas88/borrow_visualizer_prototype on toolchain 506512391b1a75ae450d36c9420978402a91abcc [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+506512391b1a75ae450d36c9420978402a91abcc" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking git repo https://github.com/Nashenas88/borrow_visualizer_prototype [INFO] finished tweaking git repo https://github.com/Nashenas88/borrow_visualizer_prototype [INFO] tweaked toml for git repo https://github.com/Nashenas88/borrow_visualizer_prototype written to /workspace/builds/worker-4-tc1/source/Cargo.toml [INFO] crate git repo https://github.com/Nashenas88/borrow_visualizer_prototype already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+506512391b1a75ae450d36c9420978402a91abcc" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded itoa v0.3.1 [INFO] [stderr] Downloaded dtoa v0.4.1 [INFO] [stderr] Downloaded atty v0.2.2 [INFO] [stderr] Downloaded serde_derive_internals v0.15.0 [INFO] [stderr] Downloaded vec_map v0.8.0 [INFO] [stderr] Downloaded log v0.3.7 [INFO] [stderr] Downloaded ansi_term v0.9.0 [INFO] [stderr] Downloaded unicode-segmentation v1.2.0 [INFO] [stderr] Downloaded strsim v0.6.0 [INFO] [stderr] Downloaded term_size v0.3.0 [INFO] [stderr] Downloaded libc v0.2.23 [INFO] [stderr] Downloaded unicode-width v0.1.4 [INFO] [stderr] Downloaded num-traits v0.1.37 [INFO] [stderr] Downloaded serde_json v1.0.2 [INFO] [stderr] Downloaded serde_derive v1.0.7 [INFO] [stderr] Downloaded bitflags v0.8.2 [INFO] [stderr] Downloaded clap v2.24.2 [INFO] [stderr] Downloaded serde v1.0.7 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:beeedbb442662e57d416641ecc3200b38e573c25b057896194468d05594dd835" "/opt/rustwide/cargo-home/bin/cargo" "+506512391b1a75ae450d36c9420978402a91abcc" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] abe5c93b62c5f7b8cde331c448cea798f497918c5683b8765682900179b3e335 [INFO] running `Command { std: "docker" "start" "-a" "abe5c93b62c5f7b8cde331c448cea798f497918c5683b8765682900179b3e335", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "abe5c93b62c5f7b8cde331c448cea798f497918c5683b8765682900179b3e335", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "abe5c93b62c5f7b8cde331c448cea798f497918c5683b8765682900179b3e335", kill_on_drop: false }` [INFO] [stdout] abe5c93b62c5f7b8cde331c448cea798f497918c5683b8765682900179b3e335 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=allow" "-e" "RUSTDOCFLAGS=--cap-lints=allow" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:beeedbb442662e57d416641ecc3200b38e573c25b057896194468d05594dd835" "/opt/rustwide/cargo-home/bin/cargo" "+506512391b1a75ae450d36c9420978402a91abcc" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 18e4ecb62707b4c10d083c82a6773fa111748bcbfaddfa7ba19b70b2a1d267f2 [INFO] running `Command { std: "docker" "start" "-a" "18e4ecb62707b4c10d083c82a6773fa111748bcbfaddfa7ba19b70b2a1d267f2", kill_on_drop: false }` [INFO] [stderr] Checking libc v0.2.23 [INFO] [stderr] Compiling syn v0.11.11 [INFO] [stderr] Checking strsim v0.6.0 [INFO] [stderr] Checking vec_map v0.8.0 [INFO] [stderr] Checking serde v1.0.7 [INFO] [stderr] Checking bitflags v0.8.2 [INFO] [stderr] Checking itoa v0.3.1 [INFO] [stderr] Checking num-traits v0.1.37 [INFO] [stderr] Checking dtoa v0.4.1 [INFO] [stderr] Checking unicode-width v0.1.4 [INFO] [stderr] Checking ansi_term v0.9.0 [INFO] [stderr] Checking unicode-segmentation v1.2.0 [INFO] [stderr] Checking log v0.3.7 [INFO] [stderr] Checking atty v0.2.2 [INFO] [stderr] Checking term_size v0.3.0 [INFO] [stderr] Checking clap v2.24.2 [INFO] [stderr] Compiling serde_derive_internals v0.15.0 [INFO] [stderr] Compiling serde_derive v1.0.7 [INFO] [stderr] Checking serde_json v1.0.2 [INFO] [stderr] Checking borrow_bounds v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] error: `box_syntax` has been removed [INFO] [stdout] --> src/main.rs:48:69 [INFO] [stdout] | [INFO] [stdout] 48 | rustc_driver::run_compiler(&args, &mut borrow_calls, None, Some(box BlackHole{})); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: use `Box::new()` instead [INFO] [stdout] | [INFO] [stdout] 48 | rustc_driver::run_compiler(&args, &mut borrow_calls, None, Some(Box::new(BlackHole{}))); [INFO] [stdout] | ~~~~~~~~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: `box_syntax` has been removed [INFO] [stdout] --> src/main.rs:48:69 [INFO] [stdout] | [INFO] [stdout] 48 | rustc_driver::run_compiler(&args, &mut borrow_calls, None, Some(box BlackHole{})); [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: use `Box::new()` instead [INFO] [stdout] | [INFO] [stdout] 48 | rustc_driver::run_compiler(&args, &mut borrow_calls, None, Some(Box::new(BlackHole{}))); [INFO] [stdout] | ~~~~~~~~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0557]: feature has been removed [INFO] [stdout] --> src/main.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | box_syntax, [INFO] [stdout] | ^^^^^^^^^^ feature has been removed [INFO] [stdout] | [INFO] [stdout] = note: replaced with `#[rustc_box]` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0557]: feature has been removed [INFO] [stdout] --> src/main.rs:2:5 [INFO] [stdout] | [INFO] [stdout] 2 | box_syntax, [INFO] [stdout] | ^^^^^^^^^^ feature has been removed [INFO] [stdout] | [INFO] [stdout] = note: replaced with `#[rustc_box]` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0557]: feature has been removed [INFO] [stdout] --> src/main.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | rustc_diagnostic_macros, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ feature has been removed [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0557]: feature has been removed [INFO] [stdout] --> src/main.rs:5:5 [INFO] [stdout] | [INFO] [stdout] 5 | rustc_diagnostic_macros, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ feature has been removed [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: `box_syntax` has been removed [INFO] [stdout] --> src/borrowcalls.rs:83:37 [INFO] [stdout] | [INFO] [stdout] 83 | InputKind::Bytes(..) => box |_, kind, span| Region::Byte(ByteRegion::new(kind, span)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: use `Box::new()` instead [INFO] [stdout] | [INFO] [stdout] 83 | InputKind::Bytes(..) => Box::new(|_, kind, span| Region::Byte(ByteRegion::new(kind, span))), [INFO] [stdout] | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: `box_syntax` has been removed [INFO] [stdout] --> src/borrowcalls.rs:84:40 [INFO] [stdout] | [INFO] [stdout] 84 | InputKind::LineInfo(..) => box |tcx, kind, span| Region::Line(LineRegion::new(tcx, kind, span)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: use `Box::new()` instead [INFO] [stdout] | [INFO] [stdout] 84 | InputKind::LineInfo(..) => Box::new(|tcx, kind, span| Region::Line(LineRegion::new(tcx, kind, span))), [INFO] [stdout] | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: `box_syntax` has been removed [INFO] [stdout] --> src/borrowcalls.rs:83:37 [INFO] [stdout] | [INFO] [stdout] 83 | InputKind::Bytes(..) => box |_, kind, span| Region::Byte(ByteRegion::new(kind, span)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: use `Box::new()` instead [INFO] [stdout] | [INFO] [stdout] 83 | InputKind::Bytes(..) => Box::new(|_, kind, span| Region::Byte(ByteRegion::new(kind, span))), [INFO] [stdout] | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: `box_syntax` has been removed [INFO] [stdout] --> src/borrowcalls.rs:84:40 [INFO] [stdout] | [INFO] [stdout] 84 | InputKind::LineInfo(..) => box |tcx, kind, span| Region::Line(LineRegion::new(tcx, kind, span)), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: use `Box::new()` instead [INFO] [stdout] | [INFO] [stdout] 84 | InputKind::LineInfo(..) => Box::new(|tcx, kind, span| Region::Line(LineRegion::new(tcx, kind, span))), [INFO] [stdout] | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: `box_syntax` has been removed [INFO] [stdout] --> src/borrowcalls.rs:109:43 [INFO] [stdout] | [INFO] [stdout] 109 | control.after_analysis.callback = box move |compile_state: &mut driver::CompileState| { [INFO] [stdout] | ___________________________________________^ [INFO] [stdout] 110 | | let tcx = if let Some(tcx) = compile_state.tcx { [INFO] [stdout] 111 | | tcx [INFO] [stdout] 112 | | } else { [INFO] [stdout] ... | [INFO] [stdout] 279 | | .join(",")); [INFO] [stdout] 280 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] help: use `Box::new()` instead [INFO] [stdout] | [INFO] [stdout] 109 ~ control.after_analysis.callback = Box::new(move |compile_state: &mut driver::CompileState| { [INFO] [stdout] 110 + let tcx = if let Some(tcx) = compile_state.tcx { [INFO] [stdout] 111 + tcx [INFO] [stdout] 112 + } else { [INFO] [stdout] 113 + debug!("no tcx"); [INFO] [stdout] 114 + return; [INFO] [stdout] 115 + }; [INFO] [stdout] 116 + [INFO] [stdout] 117 + let (offset, line) = match this.get_byte_info(tcx) { [INFO] [stdout] 118 + Ok(res) => res, [INFO] [stdout] 119 + Err(e) => { [INFO] [stdout] 120 + error::print_error(format!("{}", e)); [INFO] [stdout] 121 + return; [INFO] [stdout] 122 + } [INFO] [stdout] 123 + }; [INFO] [stdout] 124 + [INFO] [stdout] 125 + let (node_id, node, fn_like, fn_node, fn_id) = match nodeid_from_offset_and_line(tcx, offset, &line) { [INFO] [stdout] 126 + Some(res) => res, [INFO] [stdout] 127 + None => { [INFO] [stdout] 128 + debug!("unable to find matching nodeid for offset {} at line {:?}", offset.0, line); [INFO] [stdout] 129 + println!("[]"); [INFO] [stdout] 130 + return; [INFO] [stdout] 131 + } [INFO] [stdout] 132 + }; [INFO] [stdout] 133 + [INFO] [stdout] 134 + let fn_span = tcx.hir.span(fn_id); [INFO] [stdout] 135 + [INFO] [stdout] 136 + let body = tcx.hir.krate().body(fn_like.body()); [INFO] [stdout] 137 + let cfg = cfg::CFG::new(tcx, &body); [INFO] [stdout] 138 + let (bccx, analysis_data) = borrowck::build_borrowck_dataflow_data_for_fn( [INFO] [stdout] 139 + tcx, [INFO] [stdout] 140 + fn_like.body(), [INFO] [stdout] 141 + &cfg); [INFO] [stdout] 142 + // debug!("Found {} loans within fn-like identified by {}:\n{:?}\n{:?}", analysis_data.all_loans.len(), node_id.as_u32(), node, fn_node); [INFO] [stdout] 143 + [INFO] [stdout] 144 + // In a succesful compilation, `moves` will have 0 or 1 elements. Fortunately, [INFO] [stdout] 145 + // we work with failing compilations too, so it's important that we limit [INFO] [stdout] 146 + // the highlighting of the "live" span to the end of the first move. The goal [INFO] [stdout] 147 + // is to help the user more easily realize that the second move is impossible. [INFO] [stdout] 148 + let move_data = analysis_data.move_data.move_data; [INFO] [stdout] 149 + let move_data_moves = move_data.moves.borrow(); [INFO] [stdout] 150 + let mut moves: Vec<_> = move_data_moves.iter() [INFO] [stdout] 151 + .filter(|m| { [INFO] [stdout] 152 + debug!("Potential move: {:?}-{:?}", m.id, m.kind); [INFO] [stdout] 153 + move_data.path_loan_path(m.path).belongs_to(node_id) [INFO] [stdout] 154 + }) [INFO] [stdout] 155 + .map(|m| tcx.hir.span(m.id)) [INFO] [stdout] 156 + .collect(); [INFO] [stdout] 157 + moves.sort(); [INFO] [stdout] 158 + let first_move = if moves.len() > 0 { Some(moves[0]) } else { None }; [INFO] [stdout] 159 + [INFO] [stdout] 160 + for pa in move_data.path_assignments.borrow().iter() { [INFO] [stdout] 161 + debug!("Potential path assignment: {:?}-({:?},{:?})-{:?}", tcx.hir.find(pa.id), pa.span.lo, pa.span.hi, tcx.hir.find(pa.assignee_id)); [INFO] [stdout] 162 + } [INFO] [stdout] 163 + [INFO] [stdout] 164 + for vm in move_data.variant_matches.borrow().iter() { [INFO] [stdout] 165 + debug!("Potential variant match: {:?}-{:?}", tcx.hir.find(vm.id), vm.mode); [INFO] [stdout] 166 + } [INFO] [stdout] 167 + [INFO] [stdout] 168 + // gather and return analysis data when loan internals can be accessed imm [INFO] [stdout] 169 + let mut regions = move_data.var_assignments.borrow().iter() [INFO] [stdout] 170 + .filter(|a| { [INFO] [stdout] 171 + debug!("Potential var_assignment: {:?}-({:?},{:?})-{:?}", tcx.hir.find(a.id), a.span.lo, a.span.hi, tcx.hir.find(a.assignee_id)); [INFO] [stdout] 172 + a.assignee_id == node_id [INFO] [stdout] 173 + }) [INFO] [stdout] 174 + .filter_map(|a| { [INFO] [stdout] 175 + // we may want to visualiza a.span in some way [INFO] [stdout] 176 + let path = move_data.path_loan_path(a.path); [INFO] [stdout] 177 + let kill_span = path.kill_scope(&bccx).span(&tcx.hir); [INFO] [stdout] 178 + if let Some(kill_span) = kill_span { [INFO] [stdout] 179 + // If there's a move span, then we limit the "live" span to the end [INFO] [stdout] 180 + // of the move span. This shows that the variable's "scope" has [INFO] [stdout] 181 + // ended at this point. Any usages (reads, writes, borrows, moves) [INFO] [stdout] 182 + // can still be visualized, but should match with compiler errors. [INFO] [stdout] 183 + let hi = if let Some(move_span) = first_move { [INFO] [stdout] 184 + move_span.hi [INFO] [stdout] 185 + } else { [INFO] [stdout] 186 + kill_span.hi [INFO] [stdout] 187 + }; [INFO] [stdout] 188 + let live_span = Span{ lo: kill_span.lo, hi: hi, ctxt: syntax_pos::NO_EXPANSION }; [INFO] [stdout] 189 + Some(region_constructor(tcx, Kind::Live, live_span)) [INFO] [stdout] 190 + } else { [INFO] [stdout] 191 + debug!("kill_span does not exist for var"); [INFO] [stdout] 192 + None [INFO] [stdout] 193 + } [INFO] [stdout] 194 + }) [INFO] [stdout] 195 + .chain(analysis_data.safe_loans.iter() [INFO] [stdout] 196 + .filter_map(|ref sl| { [INFO] [stdout] 197 + let loan_scope = sl.loan_scope(); [INFO] [stdout] 198 + let borrow_node = tcx.hir.find(loan_scope.node_id()); [INFO] [stdout] 199 + let borrow_node = match borrow_node { [INFO] [stdout] 200 + Some(node) => node, [INFO] [stdout] 201 + _ => return None, [INFO] [stdout] 202 + }; [INFO] [stdout] 203 + [INFO] [stdout] 204 + if let hir_map::NodeExpr(expr) = borrow_node { [INFO] [stdout] 205 + if !expr_borrows_node_id(&tcx, node_id, expr, false) { [INFO] [stdout] 206 + return None; [INFO] [stdout] 207 + } [INFO] [stdout] 208 + [INFO] [stdout] 209 + let kind = match sl.kind() { [INFO] [stdout] 210 + ty::BorrowKind::ImmBorrow => Kind::Immutable, [INFO] [stdout] 211 + ty::BorrowKind::MutBorrow => Kind::Mutable, [INFO] [stdout] 212 + ty::BorrowKind::UniqueImmBorrow => Kind::UniqueImmutable, [INFO] [stdout] 213 + }; [INFO] [stdout] 214 + [INFO] [stdout] 215 + debug!("Loan scope: {:?}", loan_scope); [INFO] [stdout] 216 + let loan_span = loan_scope [INFO] [stdout] 217 + .span(&tcx.hir) [INFO] [stdout] 218 + .and_then(|s| get_unexpanded_span(s, fn_span)); [INFO] [stdout] 219 + [INFO] [stdout] 220 + debug!("Loan span: {:?}", loan_span); [INFO] [stdout] 221 + let loan_span = match loan_span { [INFO] [stdout] 222 + Some(span) => span, [INFO] [stdout] 223 + None => return None, [INFO] [stdout] 224 + }; [INFO] [stdout] 225 + return Some(region_constructor(tcx, kind, loan_span)); [INFO] [stdout] 226 + } [INFO] [stdout] 227 + [INFO] [stdout] 228 + None [INFO] [stdout] 229 + })) [INFO] [stdout] 230 + .chain(analysis_data.all_loans.iter() [INFO] [stdout] 231 + // we only care abouts loans related to our target [INFO] [stdout] 232 + .filter(|&loan| { [INFO] [stdout] 233 + debug!("Potential: {:?}", loan); [INFO] [stdout] 234 + (*loan.loan_path()).belongs_to(node_id) [INFO] [stdout] 235 + }) [INFO] [stdout] 236 + .filter_map(|loan| { [INFO] [stdout] 237 + debug!("hit"); [INFO] [stdout] 238 + let kind = match loan.kind() { [INFO] [stdout] 239 + ty::BorrowKind::ImmBorrow => Kind::Immutable, [INFO] [stdout] 240 + ty::BorrowKind::MutBorrow => Kind::Mutable, [INFO] [stdout] 241 + ty::BorrowKind::UniqueImmBorrow => Kind::UniqueImmutable, [INFO] [stdout] 242 + }; [INFO] [stdout] 243 + [INFO] [stdout] 244 + // FIXME: do we need this -> let span = loan.span(); [INFO] [stdout] 245 + [INFO] [stdout] 246 + // Make sure to get the unexpanded span, otherwise we'll [INFO] [stdout] 247 + // the span of the macro definition in another file! This [INFO] [stdout] 248 + // leads to some obviously (though it more rarely might not be) [INFO] [stdout] 249 + // incorrect spans; [INFO] [stdout] 250 + let gen_span = loan.gen_scope() [INFO] [stdout] 251 + .span(&tcx.hir) [INFO] [stdout] 252 + .and_then(|s| get_unexpanded_span(s, fn_span)); [INFO] [stdout] 253 + let kill_span = loan.kill_scope() [INFO] [stdout] 254 + .span(&tcx.hir) [INFO] [stdout] 255 + .and_then(|s| get_unexpanded_span(s, fn_span)); [INFO] [stdout] 256 + [INFO] [stdout] 257 + if let (Some(gen_span), Some(kill_span)) = (gen_span, kill_span) { [INFO] [stdout] 258 + let borrow_span = syntax_pos::Span{ [INFO] [stdout] 259 + lo: gen_span.lo, [INFO] [stdout] 260 + hi: kill_span.hi, [INFO] [stdout] 261 + ctxt: syntax_pos::NO_EXPANSION [INFO] [stdout] 262 + }; [INFO] [stdout] 263 + Some(region_constructor(tcx, kind, borrow_span)) [INFO] [stdout] 264 + } else { [INFO] [stdout] 265 + debug!("One of gen_span or kill_span does not exist for loan"); [INFO] [stdout] 266 + None [INFO] [stdout] 267 + } [INFO] [stdout] 268 + })) [INFO] [stdout] 269 + .chain(moves.iter().map(|s| region_constructor(tcx, Kind::Move, *s))) [INFO] [stdout] 270 + .collect::>(); [INFO] [stdout] 271 + regions.push(region_constructor(tcx, Kind::Assign, tcx.hir.span(node_id))); [INFO] [stdout] 272 + regions.sort(); [INFO] [stdout] 273 + println!("[{}]", regions.iter().map(|r| match *r { [INFO] [stdout] 274 + Region::Byte(ref r) => serde_json::to_string(r), [INFO] [stdout] 275 + Region::Line(ref r) => serde_json::to_string(r), [INFO] [stdout] 276 + }) [INFO] [stdout] 277 + .map(|serialize_result| serialize_result.unwrap_or_else(|e| panic!("failed to serialize: {:?}", e))) [INFO] [stdout] 278 + .collect::>() [INFO] [stdout] 279 + .join(",")); [INFO] [stdout] 280 ~ }); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: `box_syntax` has been removed [INFO] [stdout] --> src/borrowcalls.rs:109:43 [INFO] [stdout] | [INFO] [stdout] 109 | control.after_analysis.callback = box move |compile_state: &mut driver::CompileState| { [INFO] [stdout] | ___________________________________________^ [INFO] [stdout] 110 | | let tcx = if let Some(tcx) = compile_state.tcx { [INFO] [stdout] 111 | | tcx [INFO] [stdout] 112 | | } else { [INFO] [stdout] ... | [INFO] [stdout] 279 | | .join(",")); [INFO] [stdout] 280 | | }; [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] help: use `Box::new()` instead [INFO] [stdout] | [INFO] [stdout] 109 ~ control.after_analysis.callback = Box::new(move |compile_state: &mut driver::CompileState| { [INFO] [stdout] 110 + let tcx = if let Some(tcx) = compile_state.tcx { [INFO] [stdout] 111 + tcx [INFO] [stdout] 112 + } else { [INFO] [stdout] 113 + debug!("no tcx"); [INFO] [stdout] 114 + return; [INFO] [stdout] 115 + }; [INFO] [stdout] 116 + [INFO] [stdout] 117 + let (offset, line) = match this.get_byte_info(tcx) { [INFO] [stdout] 118 + Ok(res) => res, [INFO] [stdout] 119 + Err(e) => { [INFO] [stdout] 120 + error::print_error(format!("{}", e)); [INFO] [stdout] 121 + return; [INFO] [stdout] 122 + } [INFO] [stdout] 123 + }; [INFO] [stdout] 124 + [INFO] [stdout] 125 + let (node_id, node, fn_like, fn_node, fn_id) = match nodeid_from_offset_and_line(tcx, offset, &line) { [INFO] [stdout] 126 + Some(res) => res, [INFO] [stdout] 127 + None => { [INFO] [stdout] 128 + debug!("unable to find matching nodeid for offset {} at line {:?}", offset.0, line); [INFO] [stdout] 129 + println!("[]"); [INFO] [stdout] 130 + return; [INFO] [stdout] 131 + } [INFO] [stdout] 132 + }; [INFO] [stdout] 133 + [INFO] [stdout] 134 + let fn_span = tcx.hir.span(fn_id); [INFO] [stdout] 135 + [INFO] [stdout] 136 + let body = tcx.hir.krate().body(fn_like.body()); [INFO] [stdout] 137 + let cfg = cfg::CFG::new(tcx, &body); [INFO] [stdout] 138 + let (bccx, analysis_data) = borrowck::build_borrowck_dataflow_data_for_fn( [INFO] [stdout] 139 + tcx, [INFO] [stdout] 140 + fn_like.body(), [INFO] [stdout] 141 + &cfg); [INFO] [stdout] 142 + // debug!("Found {} loans within fn-like identified by {}:\n{:?}\n{:?}", analysis_data.all_loans.len(), node_id.as_u32(), node, fn_node); [INFO] [stdout] 143 + [INFO] [stdout] 144 + // In a succesful compilation, `moves` will have 0 or 1 elements. Fortunately, [INFO] [stdout] 145 + // we work with failing compilations too, so it's important that we limit [INFO] [stdout] 146 + // the highlighting of the "live" span to the end of the first move. The goal [INFO] [stdout] 147 + // is to help the user more easily realize that the second move is impossible. [INFO] [stdout] 148 + let move_data = analysis_data.move_data.move_data; [INFO] [stdout] 149 + let move_data_moves = move_data.moves.borrow(); [INFO] [stdout] 150 + let mut moves: Vec<_> = move_data_moves.iter() [INFO] [stdout] 151 + .filter(|m| { [INFO] [stdout] 152 + debug!("Potential move: {:?}-{:?}", m.id, m.kind); [INFO] [stdout] 153 + move_data.path_loan_path(m.path).belongs_to(node_id) [INFO] [stdout] 154 + }) [INFO] [stdout] 155 + .map(|m| tcx.hir.span(m.id)) [INFO] [stdout] 156 + .collect(); [INFO] [stdout] 157 + moves.sort(); [INFO] [stdout] 158 + let first_move = if moves.len() > 0 { Some(moves[0]) } else { None }; [INFO] [stdout] 159 + [INFO] [stdout] 160 + for pa in move_data.path_assignments.borrow().iter() { [INFO] [stdout] 161 + debug!("Potential path assignment: {:?}-({:?},{:?})-{:?}", tcx.hir.find(pa.id), pa.span.lo, pa.span.hi, tcx.hir.find(pa.assignee_id)); [INFO] [stdout] 162 + } [INFO] [stdout] 163 + [INFO] [stdout] 164 + for vm in move_data.variant_matches.borrow().iter() { [INFO] [stdout] 165 + debug!("Potential variant match: {:?}-{:?}", tcx.hir.find(vm.id), vm.mode); [INFO] [stdout] 166 + } [INFO] [stdout] 167 + [INFO] [stdout] 168 + // gather and return analysis data when loan internals can be accessed imm [INFO] [stdout] 169 + let mut regions = move_data.var_assignments.borrow().iter() [INFO] [stdout] 170 + .filter(|a| { [INFO] [stdout] 171 + debug!("Potential var_assignment: {:?}-({:?},{:?})-{:?}", tcx.hir.find(a.id), a.span.lo, a.span.hi, tcx.hir.find(a.assignee_id)); [INFO] [stdout] 172 + a.assignee_id == node_id [INFO] [stdout] 173 + }) [INFO] [stdout] 174 + .filter_map(|a| { [INFO] [stdout] 175 + // we may want to visualiza a.span in some way [INFO] [stdout] 176 + let path = move_data.path_loan_path(a.path); [INFO] [stdout] 177 + let kill_span = path.kill_scope(&bccx).span(&tcx.hir); [INFO] [stdout] 178 + if let Some(kill_span) = kill_span { [INFO] [stdout] 179 + // If there's a move span, then we limit the "live" span to the end [INFO] [stdout] 180 + // of the move span. This shows that the variable's "scope" has [INFO] [stdout] 181 + // ended at this point. Any usages (reads, writes, borrows, moves) [INFO] [stdout] 182 + // can still be visualized, but should match with compiler errors. [INFO] [stdout] 183 + let hi = if let Some(move_span) = first_move { [INFO] [stdout] 184 + move_span.hi [INFO] [stdout] 185 + } else { [INFO] [stdout] 186 + kill_span.hi [INFO] [stdout] 187 + }; [INFO] [stdout] 188 + let live_span = Span{ lo: kill_span.lo, hi: hi, ctxt: syntax_pos::NO_EXPANSION }; [INFO] [stdout] 189 + Some(region_constructor(tcx, Kind::Live, live_span)) [INFO] [stdout] 190 + } else { [INFO] [stdout] 191 + debug!("kill_span does not exist for var"); [INFO] [stdout] 192 + None [INFO] [stdout] 193 + } [INFO] [stdout] 194 + }) [INFO] [stdout] 195 + .chain(analysis_data.safe_loans.iter() [INFO] [stdout] 196 + .filter_map(|ref sl| { [INFO] [stdout] 197 + let loan_scope = sl.loan_scope(); [INFO] [stdout] 198 + let borrow_node = tcx.hir.find(loan_scope.node_id()); [INFO] [stdout] 199 + let borrow_node = match borrow_node { [INFO] [stdout] 200 + Some(node) => node, [INFO] [stdout] 201 + _ => return None, [INFO] [stdout] 202 + }; [INFO] [stdout] 203 + [INFO] [stdout] 204 + if let hir_map::NodeExpr(expr) = borrow_node { [INFO] [stdout] 205 + if !expr_borrows_node_id(&tcx, node_id, expr, false) { [INFO] [stdout] 206 + return None; [INFO] [stdout] 207 + } [INFO] [stdout] 208 + [INFO] [stdout] 209 + let kind = match sl.kind() { [INFO] [stdout] 210 + ty::BorrowKind::ImmBorrow => Kind::Immutable, [INFO] [stdout] 211 + ty::BorrowKind::MutBorrow => Kind::Mutable, [INFO] [stdout] 212 + ty::BorrowKind::UniqueImmBorrow => Kind::UniqueImmutable, [INFO] [stdout] 213 + }; [INFO] [stdout] 214 + [INFO] [stdout] 215 + debug!("Loan scope: {:?}", loan_scope); [INFO] [stdout] 216 + let loan_span = loan_scope [INFO] [stdout] 217 + .span(&tcx.hir) [INFO] [stdout] 218 + .and_then(|s| get_unexpanded_span(s, fn_span)); [INFO] [stdout] 219 + [INFO] [stdout] 220 + debug!("Loan span: {:?}", loan_span); [INFO] [stdout] 221 + let loan_span = match loan_span { [INFO] [stdout] 222 + Some(span) => span, [INFO] [stdout] 223 + None => return None, [INFO] [stdout] 224 + }; [INFO] [stdout] 225 + return Some(region_constructor(tcx, kind, loan_span)); [INFO] [stdout] 226 + } [INFO] [stdout] 227 + [INFO] [stdout] 228 + None [INFO] [stdout] 229 + })) [INFO] [stdout] 230 + .chain(analysis_data.all_loans.iter() [INFO] [stdout] 231 + // we only care abouts loans related to our target [INFO] [stdout] 232 + .filter(|&loan| { [INFO] [stdout] 233 + debug!("Potential: {:?}", loan); [INFO] [stdout] 234 + (*loan.loan_path()).belongs_to(node_id) [INFO] [stdout] 235 + }) [INFO] [stdout] 236 + .filter_map(|loan| { [INFO] [stdout] 237 + debug!("hit"); [INFO] [stdout] 238 + let kind = match loan.kind() { [INFO] [stdout] 239 + ty::BorrowKind::ImmBorrow => Kind::Immutable, [INFO] [stdout] 240 + ty::BorrowKind::MutBorrow => Kind::Mutable, [INFO] [stdout] 241 + ty::BorrowKind::UniqueImmBorrow => Kind::UniqueImmutable, [INFO] [stdout] 242 + }; [INFO] [stdout] 243 + [INFO] [stdout] 244 + // FIXME: do we need this -> let span = loan.span(); [INFO] [stdout] 245 + [INFO] [stdout] 246 + // Make sure to get the unexpanded span, otherwise we'll [INFO] [stdout] 247 + // the span of the macro definition in another file! This [INFO] [stdout] 248 + // leads to some obviously (though it more rarely might not be) [INFO] [stdout] 249 + // incorrect spans; [INFO] [stdout] 250 + let gen_span = loan.gen_scope() [INFO] [stdout] 251 + .span(&tcx.hir) [INFO] [stdout] 252 + .and_then(|s| get_unexpanded_span(s, fn_span)); [INFO] [stdout] 253 + let kill_span = loan.kill_scope() [INFO] [stdout] 254 + .span(&tcx.hir) [INFO] [stdout] 255 + .and_then(|s| get_unexpanded_span(s, fn_span)); [INFO] [stdout] 256 + [INFO] [stdout] 257 + if let (Some(gen_span), Some(kill_span)) = (gen_span, kill_span) { [INFO] [stdout] 258 + let borrow_span = syntax_pos::Span{ [INFO] [stdout] 259 + lo: gen_span.lo, [INFO] [stdout] 260 + hi: kill_span.hi, [INFO] [stdout] 261 + ctxt: syntax_pos::NO_EXPANSION [INFO] [stdout] 262 + }; [INFO] [stdout] 263 + Some(region_constructor(tcx, kind, borrow_span)) [INFO] [stdout] 264 + } else { [INFO] [stdout] 265 + debug!("One of gen_span or kill_span does not exist for loan"); [INFO] [stdout] 266 + None [INFO] [stdout] 267 + } [INFO] [stdout] 268 + })) [INFO] [stdout] 269 + .chain(moves.iter().map(|s| region_constructor(tcx, Kind::Move, *s))) [INFO] [stdout] 270 + .collect::>(); [INFO] [stdout] 271 + regions.push(region_constructor(tcx, Kind::Assign, tcx.hir.span(node_id))); [INFO] [stdout] 272 + regions.sort(); [INFO] [stdout] 273 + println!("[{}]", regions.iter().map(|r| match *r { [INFO] [stdout] 274 + Region::Byte(ref r) => serde_json::to_string(r), [INFO] [stdout] 275 + Region::Line(ref r) => serde_json::to_string(r), [INFO] [stdout] 276 + }) [INFO] [stdout] 277 + .map(|serialize_result| serialize_result.unwrap_or_else(|e| panic!("failed to serialize: {:?}", e))) [INFO] [stdout] 278 + .collect::>() [INFO] [stdout] 279 + .join(",")); [INFO] [stdout] 280 ~ }); [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0462]: found staticlib `rustc` instead of rlib or dylib [INFO] [stdout] --> src/main.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | extern crate rustc; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: the following crate versions were found: [INFO] [stdout] crate `rustc`: /opt/rustwide/rustup-home/toolchains/506512391b1a75ae450d36c9420978402a91abcc/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.tsan.a [INFO] [stdout] crate `rustc`: /opt/rustwide/rustup-home/toolchains/506512391b1a75ae450d36c9420978402a91abcc/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a [INFO] [stdout] crate `rustc`: /opt/rustwide/rustup-home/toolchains/506512391b1a75ae450d36c9420978402a91abcc/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.msan.a [INFO] [stdout] crate `rustc`: /opt/rustwide/rustup-home/toolchains/506512391b1a75ae450d36c9420978402a91abcc/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.lsan.a [INFO] [stdout] crate `rustc`: /opt/rustwide/rustup-home/toolchains/506512391b1a75ae450d36c9420978402a91abcc/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.safestack.a [INFO] [stdout] crate `rustc`: /opt/rustwide/rustup-home/toolchains/506512391b1a75ae450d36c9420978402a91abcc/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.dfsan.a [INFO] [stdout] = help: please recompile that crate using --crate-type lib [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0462]: found staticlib `rustc` instead of rlib or dylib [INFO] [stdout] --> src/main.rs:9:1 [INFO] [stdout] | [INFO] [stdout] 9 | extern crate rustc; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: the following crate versions were found: [INFO] [stdout] crate `rustc`: /opt/rustwide/rustup-home/toolchains/506512391b1a75ae450d36c9420978402a91abcc/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.tsan.a [INFO] [stdout] crate `rustc`: /opt/rustwide/rustup-home/toolchains/506512391b1a75ae450d36c9420978402a91abcc/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.asan.a [INFO] [stdout] crate `rustc`: /opt/rustwide/rustup-home/toolchains/506512391b1a75ae450d36c9420978402a91abcc/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.msan.a [INFO] [stdout] crate `rustc`: /opt/rustwide/rustup-home/toolchains/506512391b1a75ae450d36c9420978402a91abcc/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.lsan.a [INFO] [stdout] crate `rustc`: /opt/rustwide/rustup-home/toolchains/506512391b1a75ae450d36c9420978402a91abcc/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.safestack.a [INFO] [stdout] crate `rustc`: /opt/rustwide/rustup-home/toolchains/506512391b1a75ae450d36c9420978402a91abcc/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc-nightly_rt.dfsan.a [INFO] [stdout] = help: please recompile that crate using --crate-type lib [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0463]: can't find crate for `rustc_driver` [INFO] [stdout] --> src/main.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | extern crate rustc_driver; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate [INFO] [stdout] | [INFO] [stdout] = help: maybe you need to install the missing components with: `rustup component add rust-src rustc-dev llvm-tools-preview` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0463]: can't find crate for `rustc_driver` [INFO] [stdout] --> src/main.rs:10:1 [INFO] [stdout] | [INFO] [stdout] 10 | extern crate rustc_driver; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate [INFO] [stdout] | [INFO] [stdout] = help: maybe you need to install the missing components with: `rustup component add rust-src rustc-dev llvm-tools-preview` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0463]: can't find crate for `rustc_borrowck` [INFO] [stdout] --> src/main.rs:11:1 [INFO] [stdout] | [INFO] [stdout] 11 | extern crate rustc_borrowck as borrowck; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate [INFO] [stdout] | [INFO] [stdout] = help: maybe you need to install the missing components with: `rustup component add rust-src rustc-dev llvm-tools-preview` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0463]: can't find crate for `rustc_borrowck` [INFO] [stdout] --> src/main.rs:11:1 [INFO] [stdout] | [INFO] [stdout] 11 | extern crate rustc_borrowck as borrowck; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate [INFO] [stdout] | [INFO] [stdout] = help: maybe you need to install the missing components with: `rustup component add rust-src rustc-dev llvm-tools-preview` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0463]: can't find crate for `rustc_errors` [INFO] [stdout] --> src/main.rs:12:1 [INFO] [stdout] | [INFO] [stdout] 12 | extern crate rustc_errors as errors; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate [INFO] [stdout] | [INFO] [stdout] = help: maybe you need to install the missing components with: `rustup component add rust-src rustc-dev llvm-tools-preview` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0463]: can't find crate for `syntax` [INFO] [stdout] --> src/main.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | extern crate syntax; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ can't find crate [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0463]: can't find crate for `rustc_errors` [INFO] [stdout] --> src/main.rs:12:1 [INFO] [stdout] | [INFO] [stdout] 12 | extern crate rustc_errors as errors; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate [INFO] [stdout] | [INFO] [stdout] = help: maybe you need to install the missing components with: `rustup component add rust-src rustc-dev llvm-tools-preview` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0463]: can't find crate for `syntax` [INFO] [stdout] --> src/main.rs:13:1 [INFO] [stdout] | [INFO] [stdout] 13 | extern crate syntax; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^ can't find crate [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0463]: can't find crate for `syntax_pos` [INFO] [stdout] --> src/main.rs:14:1 [INFO] [stdout] | [INFO] [stdout] 14 | extern crate syntax_pos; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0463]: can't find crate for `syntax_pos` [INFO] [stdout] --> src/main.rs:14:1 [INFO] [stdout] | [INFO] [stdout] 14 | extern crate syntax_pos; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^ can't find crate [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: `box_syntax` has been removed [INFO] [stdout] --> src/args.rs:59:21 [INFO] [stdout] | [INFO] [stdout] 59 | box SimpleFileLogger::new(file.unwrap()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: use `Box::new()` instead [INFO] [stdout] | [INFO] [stdout] 59 | Box::new(SimpleFileLogger::new(file.unwrap())) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: `box_syntax` has been removed [INFO] [stdout] --> src/args.rs:59:21 [INFO] [stdout] | [INFO] [stdout] 59 | box SimpleFileLogger::new(file.unwrap()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: use `Box::new()` instead [INFO] [stdout] | [INFO] [stdout] 59 | Box::new(SimpleFileLogger::new(file.unwrap())) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: `box_syntax` has been removed [INFO] [stdout] --> src/args.rs:81:21 [INFO] [stdout] | [INFO] [stdout] 81 | box SimpleFileLogger::new(file.unwrap()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: use `Box::new()` instead [INFO] [stdout] | [INFO] [stdout] 81 | Box::new(SimpleFileLogger::new(file.unwrap())) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: `box_syntax` has been removed [INFO] [stdout] --> src/args.rs:81:21 [INFO] [stdout] | [INFO] [stdout] 81 | box SimpleFileLogger::new(file.unwrap()) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] help: use `Box::new()` instead [INFO] [stdout] | [INFO] [stdout] 81 | Box::new(SimpleFileLogger::new(file.unwrap())) [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error: aborting due to 14 previous errors [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0462, E0463, E0557. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0462`. [INFO] [stdout] [INFO] [stdout] error: aborting due to 14 previous errors [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0462, E0463, E0557. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0462`. [INFO] [stdout] [INFO] [stderr] error: could not compile `borrow_bounds` (bin "borrow_bounds") due to 15 previous errors [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: could not compile `borrow_bounds` (bin "borrow_bounds" test) due to 15 previous errors [INFO] running `Command { std: "docker" "inspect" "18e4ecb62707b4c10d083c82a6773fa111748bcbfaddfa7ba19b70b2a1d267f2", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "18e4ecb62707b4c10d083c82a6773fa111748bcbfaddfa7ba19b70b2a1d267f2", kill_on_drop: false }` [INFO] [stdout] 18e4ecb62707b4c10d083c82a6773fa111748bcbfaddfa7ba19b70b2a1d267f2