[INFO] fetching crate xi-core-lib 0.3.0... [INFO] checking xi-core-lib-0.3.0 against try#998b6603a58e47f42ccce7a67943234e96b6839e for pr-143170 [INFO] extracting crate xi-core-lib 0.3.0 into /workspace/builds/worker-3-tc2/source [INFO] started tweaking crates.io crate xi-core-lib 0.3.0 [INFO] finished tweaking crates.io crate xi-core-lib 0.3.0 [INFO] tweaked toml for crates.io crate xi-core-lib 0.3.0 written to /workspace/builds/worker-3-tc2/source/Cargo.toml [INFO] validating manifest of crates.io crate xi-core-lib 0.3.0 on toolchain 998b6603a58e47f42ccce7a67943234e96b6839e [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+998b6603a58e47f42ccce7a67943234e96b6839e" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+998b6603a58e47f42ccce7a67943234e96b6839e" "generate-lockfile" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Updating crates.io index [INFO] [stderr] Blocking waiting for file lock on package cache [INFO] [stderr] Locking 107 packages to latest compatible versions [INFO] [stderr] Adding notify v4.0.18 (available: v8.0.0) [INFO] [stderr] Adding sha2 v0.8.2 (available: v0.10.9) [INFO] [stderr] Adding syntect v3.3.0 (available: v5.2.0) [INFO] [stderr] Adding time v0.1.45 (available: v0.3.41) [INFO] [stderr] Adding toml v0.5.11 (available: v0.8.23) [INFO] [stderr] Adding wasi v0.10.0+wasi-snapshot-preview1 (available: v0.10.2+wasi-snapshot-preview1) [INFO] [stderr] Adding xi-unicode v0.2.1 (available: v0.3.0) [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+998b6603a58e47f42ccce7a67943234e96b6839e" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/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:90999bfc7ae267e83380e433d8e61a7c072ca6729e92edbae886d3423b3a6f4c" "/opt/rustwide/cargo-home/bin/cargo" "+998b6603a58e47f42ccce7a67943234e96b6839e" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] dc36d2a29aa2ceed13c4329705c1d11c2914f59d9e720b22819027a3c1f108fb [INFO] running `Command { std: "docker" "start" "-a" "dc36d2a29aa2ceed13c4329705c1d11c2914f59d9e720b22819027a3c1f108fb", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "dc36d2a29aa2ceed13c4329705c1d11c2914f59d9e720b22819027a3c1f108fb", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "dc36d2a29aa2ceed13c4329705c1d11c2914f59d9e720b22819027a3c1f108fb", kill_on_drop: false }` [INFO] [stdout] dc36d2a29aa2ceed13c4329705c1d11c2914f59d9e720b22819027a3c1f108fb [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-3-tc2/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=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-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:90999bfc7ae267e83380e433d8e61a7c072ca6729e92edbae886d3423b3a6f4c" "/opt/rustwide/cargo-home/bin/cargo" "+998b6603a58e47f42ccce7a67943234e96b6839e" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] 9516c661ebcfe869d347bd6f9cb851093fa4d5aa4ebaafb25a678fed93b53ba6 [INFO] running `Command { std: "docker" "start" "-a" "9516c661ebcfe869d347bd6f9cb851093fa4d5aa4ebaafb25a678fed93b53ba6", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.95 [INFO] [stderr] Compiling serde v1.0.219 [INFO] [stderr] Checking aho-corasick v1.1.3 [INFO] [stderr] Checking lazycell v1.3.0 [INFO] [stderr] Checking inotify-sys v0.1.5 [INFO] [stderr] Checking line-wrap v0.1.1 [INFO] [stderr] Checking crossbeam-channel v0.4.4 [INFO] [stderr] Checking xml-rs v0.8.26 [INFO] [stderr] Checking flate2 v1.1.2 [INFO] [stderr] Checking filetime v0.2.25 [INFO] [stderr] Checking bytecount v0.5.1 [INFO] [stderr] Checking rand v0.4.6 [INFO] [stderr] Checking xi-unicode v0.2.1 [INFO] [stderr] Checking mio-extras v2.0.6 [INFO] [stderr] Checking inotify v0.7.1 [INFO] [stderr] Checking notify v4.0.18 [INFO] [stderr] Checking crossbeam v0.7.3 [INFO] [stderr] Compiling quote v1.0.40 [INFO] [stderr] Checking tempdir v0.3.7 [INFO] [stderr] Compiling syn v2.0.104 [INFO] [stderr] Checking regex-automata v0.4.9 [INFO] [stderr] Checking regex v1.11.1 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Checking serde_json v1.0.140 [INFO] [stderr] Checking plist v0.4.2 [INFO] [stderr] Checking bincode v1.3.3 [INFO] [stderr] Checking toml v0.5.11 [INFO] [stderr] Checking xi-rope v0.3.0 [INFO] [stderr] Checking xi-trace v0.2.0 [INFO] [stderr] Checking syntect v3.3.0 [INFO] [stderr] Checking xi-rpc v0.3.0 [INFO] [stderr] Checking xi-core-lib v0.3.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: unnecessary trailing semicolon [INFO] [stdout] --> src/backspace.rs:61:14 [INFO] [stdout] | [INFO] [stdout] 61 | }; [INFO] [stdout] | ^ help: remove this semicolon [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(redundant_semicolons)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary trailing semicolon [INFO] [stdout] --> src/backspace.rs:61:14 [INFO] [stdout] | [INFO] [stdout] 61 | }; [INFO] [stdout] | ^ help: remove this semicolon [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(redundant_semicolons)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/config.rs:699:62 [INFO] [stdout] | [INFO] [stdout] 699 | UnknownDomain(ref s) => write!(f, "{}: {}", self.description(), s), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/config.rs:700:70 [INFO] [stdout] | [INFO] [stdout] 700 | Parse(ref p, ref e) => write!(f, "{} ({:?}), {:?}", self.description(), p, e), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/config.rs:712:34 [INFO] [stdout] | [INFO] [stdout] 712 | Parse(_, ref e) => e.description(), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/config.rs:713:28 [INFO] [stdout] | [INFO] [stdout] 713 | Io(ref e) => e.description(), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/config.rs:714:40 [INFO] [stdout] | [INFO] [stdout] 714 | UnexpectedItem(ref e) => e.description(), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/config.rs:699:62 [INFO] [stdout] | [INFO] [stdout] 699 | UnknownDomain(ref s) => write!(f, "{}: {}", self.description(), s), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/config.rs:700:70 [INFO] [stdout] | [INFO] [stdout] 700 | Parse(ref p, ref e) => write!(f, "{} ({:?}), {:?}", self.description(), p, e), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/config.rs:712:34 [INFO] [stdout] | [INFO] [stdout] 712 | Parse(_, ref e) => e.description(), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/config.rs:713:28 [INFO] [stdout] | [INFO] [stdout] 713 | Io(ref e) => e.description(), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated method `std::error::Error::description`: use the Display impl or to_string() [INFO] [stdout] --> src/config.rs:714:40 [INFO] [stdout] | [INFO] [stdout] 714 | UnexpectedItem(ref e) => e.description(), [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0282]: type annotations needed [INFO] [stdout] --> src/linewrap.rs:1177:9 [INFO] [stdout] | [INFO] [stdout] 1177 | assert_eq!(make_ranges(&lines.work), vec![]); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type [INFO] [stdout] | [INFO] [stdout] = note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] error[E0283]: type annotations needed [INFO] [stdout] --> src/linewrap.rs:1177:9 [INFO] [stdout] | [INFO] [stdout] 1177 | assert_eq!(make_ranges(&lines.work), vec![]); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type [INFO] [stdout] | [INFO] [stdout] = note: multiple `impl`s satisfying `std::ops::Range: PartialEq<_>` found in the following crates: `aho_corasick`, `core`, `regex_automata`: [INFO] [stdout] - impl PartialEq for std::ops::Range; [INFO] [stdout] - impl PartialEq for std::ops::Range; [INFO] [stdout] - impl PartialEq for std::ops::Range [INFO] [stdout] where Idx: PartialEq; [INFO] [stdout] = note: required for `Vec>` to implement `PartialEq>` [INFO] [stdout] = note: this error originates in the macro `assert_eq` (in Nightly builds, run with -Z macro-backtrace for more info) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/plugins/catalog.rs:39:8 [INFO] [stdout] | [INFO] [stdout] 39 | Io(io::Error), [INFO] [stdout] | -- ^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `PluginLoadError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 39 - Io(io::Error), [INFO] [stdout] 39 + Io(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field `0` is never read [INFO] [stdout] --> src/plugins/catalog.rs:41:11 [INFO] [stdout] | [INFO] [stdout] 41 | Parse(toml::de::Error), [INFO] [stdout] | ----- ^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | field in this variant [INFO] [stdout] | [INFO] [stdout] = note: `PluginLoadError` has a derived impl for the trait `Debug`, but this is intentionally ignored during dead code analysis [INFO] [stdout] help: consider changing the field to be of unit type to suppress this warning while preserving the field numbering, or remove the field [INFO] [stdout] | [INFO] [stdout] 41 - Parse(toml::de::Error), [INFO] [stdout] 41 + Parse(()), [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing [INFO] [stdout] --> src/core.rs:65:18 [INFO] [stdout] | [INFO] [stdout] 65 | pub fn inner(&self) -> MutexGuard { [INFO] [stdout] | ^^^^^ --------------------- the lifetime gets resolved as `'_` [INFO] [stdout] | | [INFO] [stdout] | this lifetime flows to the output [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(mismatched_lifetime_syntaxes)]` on by default [INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths [INFO] [stdout] | [INFO] [stdout] 65 | pub fn inner(&self) -> MutexGuard<'_, CoreState> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing [INFO] [stdout] --> src/editor.rs:441:28 [INFO] [stdout] | [INFO] [stdout] 441 | fn extract_sel_regions(&self, sel_regions: &[SelRegion]) -> Option> { [INFO] [stdout] | ^^^^^ this lifetime flows to the output -------- the lifetime gets resolved as `'_` [INFO] [stdout] | [INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths [INFO] [stdout] | [INFO] [stdout] 441 | fn extract_sel_regions(&self, sel_regions: &[SelRegion]) -> Option> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing [INFO] [stdout] --> src/editor.rs:940:27 [INFO] [stdout] | [INFO] [stdout] 940 | pub(crate) fn get_rev(&self, rev: RevToken) -> Option> { [INFO] [stdout] | ^^^^^ --------- the lifetime gets resolved as `'_` [INFO] [stdout] | | [INFO] [stdout] | this lifetime flows to the output [INFO] [stdout] | [INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths [INFO] [stdout] | [INFO] [stdout] 940 | pub(crate) fn get_rev(&self, rev: RevToken) -> Option> { [INFO] [stdout] | +++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing [INFO] [stdout] --> src/index_set.rs:112:28 [INFO] [stdout] | [INFO] [stdout] 112 | pub fn minus_one_range(&self, start: usize, end: usize) -> MinusIter { [INFO] [stdout] | ^^^^^ --------- the lifetime gets resolved as `'_` [INFO] [stdout] | | [INFO] [stdout] | this lifetime flows to the output [INFO] [stdout] | [INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths [INFO] [stdout] | [INFO] [stdout] 112 | pub fn minus_one_range(&self, start: usize, end: usize) -> MinusIter<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unused return value of `std::mem::replace` that must be used [INFO] [stdout] --> src/recorder.rs:77:9 [INFO] [stdout] | [INFO] [stdout] 77 | mem::replace(&mut self.active_recording, recording_name); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: if you don't need the old value, you can just assign the new value directly [INFO] [stdout] = note: `#[warn(unused_must_use)]` on by default [INFO] [stdout] help: use `let _ = ...` to ignore the resulting value [INFO] [stdout] | [INFO] [stdout] 77 | let _ = mem::replace(&mut self.active_recording, recording_name); [INFO] [stdout] | +++++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing [INFO] [stdout] --> src/styles.rs:202:28 [INFO] [stdout] | [INFO] [stdout] 202 | pub fn get_highlighter(&self) -> Highlighter { [INFO] [stdout] | ^^^^^ ----------- the lifetime gets resolved as `'_` [INFO] [stdout] | | [INFO] [stdout] | this lifetime flows to the output [INFO] [stdout] | [INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths [INFO] [stdout] | [INFO] [stdout] 202 | pub fn get_highlighter(&self) -> Highlighter<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing [INFO] [stdout] --> src/tabs.rs:275:32 [INFO] [stdout] | [INFO] [stdout] 275 | pub(crate) fn make_context(&self, view_id: ViewId) -> Option { [INFO] [stdout] | ^^^^^ ------------ the lifetime gets resolved as `'_` [INFO] [stdout] | | [INFO] [stdout] | this lifetime flows to the output [INFO] [stdout] | [INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths [INFO] [stdout] | [INFO] [stdout] 275 | pub(crate) fn make_context(&self, view_id: ViewId) -> Option> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing [INFO] [stdout] --> src/tabs.rs:307:25 [INFO] [stdout] | [INFO] [stdout] 307 | fn iter_groups<'a>(&'a self) -> Iter<'a, Box + 'a>> { [INFO] [stdout] | ^^ -- ------- -- the lifetimes get resolved as `'a` [INFO] [stdout] | | | | [INFO] [stdout] | | | the lifetimes get resolved as `'a` [INFO] [stdout] | | the lifetimes get resolved as `'a` [INFO] [stdout] | this lifetime flows to the output [INFO] [stdout] | [INFO] [stdout] help: one option is to consistently use `'a` [INFO] [stdout] | [INFO] [stdout] 307 | fn iter_groups<'a>(&'a self) -> Iter<'a, Box + 'a>> { [INFO] [stdout] | ++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: lifetime flowing from input to output with different syntax can be confusing [INFO] [stdout] --> src/width_cache.rs:111:28 [INFO] [stdout] | [INFO] [stdout] 111 | pub fn batch_req(self: &mut WidthCache) -> WidthBatchReq { [INFO] [stdout] | ^^^^^^^^^^^^^^^ ------------- the lifetime gets resolved as `'_` [INFO] [stdout] | | [INFO] [stdout] | this lifetime flows to the output [INFO] [stdout] | [INFO] [stdout] help: one option is to remove the lifetime for references and use the anonymous lifetime for paths [INFO] [stdout] | [INFO] [stdout] 111 | pub fn batch_req(self: &mut WidthCache) -> WidthBatchReq<'_> { [INFO] [stdout] | ++++ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] Some errors have detailed explanations: E0282, E0283. [INFO] [stdout] [INFO] [stdout] For more information about an error, try `rustc --explain E0282`. [INFO] [stdout] [INFO] [stderr] error: could not compile `xi-core-lib` (lib test) due to 2 previous errors; 6 warnings emitted [INFO] running `Command { std: "docker" "inspect" "9516c661ebcfe869d347bd6f9cb851093fa4d5aa4ebaafb25a678fed93b53ba6", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "9516c661ebcfe869d347bd6f9cb851093fa4d5aa4ebaafb25a678fed93b53ba6", kill_on_drop: false }` [INFO] [stdout] 9516c661ebcfe869d347bd6f9cb851093fa4d5aa4ebaafb25a678fed93b53ba6