diff --git a/src/librustc_lint/builtin.rs b/src/librustc_lint/builtin.rs index cbb0177fe4f4e..c2dcbad8d2451 100644 --- a/src/librustc_lint/builtin.rs +++ b/src/librustc_lint/builtin.rs @@ -1568,10 +1568,10 @@ impl<'a, 'tcx> LateLintPass<'a, 'tcx> for ExternCrate { if let Some(orig) = orig { err.span_suggestion(it.span, &help, - format!("{}use {} as {}", pub_, orig, it.name)); + format!("{}use {} as {};", pub_, orig, it.name)); } else { err.span_suggestion(it.span, &help, - format!("{}use {}", pub_, it.name)); + format!("{}use {};", pub_, it.name)); } } else { err.span_suggestion(it.span, "remove it", "".into()); diff --git a/src/librustc_target/spec/aarch64_unknown_openbsd.rs b/src/librustc_target/spec/aarch64_unknown_openbsd.rs new file mode 100644 index 0000000000000..25817fce5ce6c --- /dev/null +++ b/src/librustc_target/spec/aarch64_unknown_openbsd.rs @@ -0,0 +1,31 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use spec::{LinkerFlavor, Target, TargetResult}; + +pub fn target() -> TargetResult { + let mut base = super::openbsd_base::opts(); + base.max_atomic_width = Some(128); + base.abi_blacklist = super::arm_base::abi_blacklist(); + + Ok(Target { + llvm_target: "aarch64-unknown-openbsd".to_string(), + target_endian: "little".to_string(), + target_pointer_width: "64".to_string(), + target_c_int_width: "32".to_string(), + data_layout: "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128".to_string(), + arch: "aarch64".to_string(), + target_os: "openbsd".to_string(), + target_env: "".to_string(), + target_vendor: "unknown".to_string(), + linker_flavor: LinkerFlavor::Gcc, + options: base, + }) +} diff --git a/src/librustc_target/spec/i686_unknown_openbsd.rs b/src/librustc_target/spec/i686_unknown_openbsd.rs index 79c059c8f952d..f22bf2abe4501 100644 --- a/src/librustc_target/spec/i686_unknown_openbsd.rs +++ b/src/librustc_target/spec/i686_unknown_openbsd.rs @@ -15,6 +15,7 @@ pub fn target() -> TargetResult { base.cpu = "pentium4".to_string(); base.max_atomic_width = Some(64); base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m32".to_string()); + base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-fuse-ld=lld".to_string()); base.stack_probes = true; Ok(Target { diff --git a/src/librustc_target/spec/mod.rs b/src/librustc_target/spec/mod.rs index 708a3865b23b9..fb20fe9c8918f 100644 --- a/src/librustc_target/spec/mod.rs +++ b/src/librustc_target/spec/mod.rs @@ -313,6 +313,7 @@ supported_targets! { ("x86_64-unknown-bitrig", x86_64_unknown_bitrig), + ("aarch64-unknown-openbsd", aarch64_unknown_openbsd), ("i686-unknown-openbsd", i686_unknown_openbsd), ("x86_64-unknown-openbsd", x86_64_unknown_openbsd), diff --git a/src/test/ui-fulldeps/unnecessary-extern-crate.stderr b/src/test/ui-fulldeps/unnecessary-extern-crate.stderr index b0b56f527e64f..ab5457018eda6 100644 --- a/src/test/ui-fulldeps/unnecessary-extern-crate.stderr +++ b/src/test/ui-fulldeps/unnecessary-extern-crate.stderr @@ -14,55 +14,55 @@ error: `extern crate` is unnecessary in the new edition --> $DIR/unnecessary-extern-crate.rs:19:1 | LL | extern crate alloc as x; - | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use `use`: `use alloc as x` + | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use `use`: `use alloc as x;` error: `extern crate` is unnecessary in the new edition --> $DIR/unnecessary-extern-crate.rs:25:1 | LL | pub extern crate test as y; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `pub use`: `pub use test as y` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `pub use`: `pub use test as y;` error: `extern crate` is unnecessary in the new edition --> $DIR/unnecessary-extern-crate.rs:28:1 | LL | pub extern crate libc; - | ^^^^^^^^^^^^^^^^^^^^^^ help: use `pub use`: `pub use libc` + | ^^^^^^^^^^^^^^^^^^^^^^ help: use `pub use`: `pub use libc;` error: `extern crate` is unnecessary in the new edition --> $DIR/unnecessary-extern-crate.rs:34:5 | LL | extern crate alloc; - | ^^^^^^^^^^^^^^^^^^^ help: use `use`: `use alloc` + | ^^^^^^^^^^^^^^^^^^^ help: use `use`: `use alloc;` error: `extern crate` is unnecessary in the new edition --> $DIR/unnecessary-extern-crate.rs:37:5 | LL | extern crate alloc as x; - | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use `use`: `use alloc as x` + | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use `use`: `use alloc as x;` error: `extern crate` is unnecessary in the new edition --> $DIR/unnecessary-extern-crate.rs:40:5 | LL | pub extern crate test; - | ^^^^^^^^^^^^^^^^^^^^^^ help: use `pub use`: `pub use test` + | ^^^^^^^^^^^^^^^^^^^^^^ help: use `pub use`: `pub use test;` error: `extern crate` is unnecessary in the new edition --> $DIR/unnecessary-extern-crate.rs:43:5 | LL | pub extern crate test as y; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `pub use`: `pub use test as y` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `pub use`: `pub use test as y;` error: `extern crate` is unnecessary in the new edition --> $DIR/unnecessary-extern-crate.rs:47:9 | LL | extern crate alloc; - | ^^^^^^^^^^^^^^^^^^^ help: use `use`: `use alloc` + | ^^^^^^^^^^^^^^^^^^^ help: use `use`: `use alloc;` error: `extern crate` is unnecessary in the new edition --> $DIR/unnecessary-extern-crate.rs:50:9 | LL | extern crate alloc as x; - | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use `use`: `use alloc as x` + | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use `use`: `use alloc as x;` error: aborting due to 10 previous errors diff --git a/src/test/ui/suggestions/auxiliary/removing-extern-crate.rs b/src/test/ui/suggestions/auxiliary/removing-extern-crate.rs new file mode 100644 index 0000000000000..4275e80e7fe8b --- /dev/null +++ b/src/test/ui/suggestions/auxiliary/removing-extern-crate.rs @@ -0,0 +1,11 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// intentionally blank diff --git a/src/test/ui/suggestions/removing-extern-crate.fixed b/src/test/ui/suggestions/removing-extern-crate.fixed new file mode 100644 index 0000000000000..723137f5db0c1 --- /dev/null +++ b/src/test/ui/suggestions/removing-extern-crate.fixed @@ -0,0 +1,27 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: --edition 2018 +// aux-build:removing-extern-crate.rs +// run-rustfix +// compile-pass + +#![warn(rust_2018_idioms)] +#![allow(unused_imports)] + +use std as foo; + + +mod another { + use std as foo; + use std; +} + +fn main() {} diff --git a/src/test/ui/suggestions/removing-extern-crate.rs b/src/test/ui/suggestions/removing-extern-crate.rs new file mode 100644 index 0000000000000..29479086460e6 --- /dev/null +++ b/src/test/ui/suggestions/removing-extern-crate.rs @@ -0,0 +1,27 @@ +// Copyright 2018 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or +// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license +// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// compile-flags: --edition 2018 +// aux-build:removing-extern-crate.rs +// run-rustfix +// compile-pass + +#![warn(rust_2018_idioms)] +#![allow(unused_imports)] + +extern crate std as foo; +extern crate core; + +mod another { + extern crate std as foo; + extern crate std; +} + +fn main() {} diff --git a/src/test/ui/suggestions/removing-extern-crate.stderr b/src/test/ui/suggestions/removing-extern-crate.stderr new file mode 100644 index 0000000000000..317703d0caa52 --- /dev/null +++ b/src/test/ui/suggestions/removing-extern-crate.stderr @@ -0,0 +1,31 @@ +warning: `extern crate` is unnecessary in the new edition + --> $DIR/removing-extern-crate.rs:19:1 + | +LL | extern crate std as foo; + | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use `use`: `use std as foo;` + | +note: lint level defined here + --> $DIR/removing-extern-crate.rs:16:9 + | +LL | #![warn(rust_2018_idioms)] + | ^^^^^^^^^^^^^^^^ + = note: #[warn(unnecessary_extern_crate)] implied by #[warn(rust_2018_idioms)] + +warning: `extern crate` is unnecessary in the new edition + --> $DIR/removing-extern-crate.rs:20:1 + | +LL | extern crate core; + | ^^^^^^^^^^^^^^^^^^ help: remove it + +warning: `extern crate` is unnecessary in the new edition + --> $DIR/removing-extern-crate.rs:23:5 + | +LL | extern crate std as foo; + | ^^^^^^^^^^^^^^^^^^^^^^^^ help: use `use`: `use std as foo;` + +warning: `extern crate` is unnecessary in the new edition + --> $DIR/removing-extern-crate.rs:24:5 + | +LL | extern crate std; + | ^^^^^^^^^^^^^^^^^ help: use `use`: `use std;` +