From 416caa10ed055e8f059bb2fe3d3dd67c063dfe6c Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Sun, 4 Aug 2019 20:20:12 +0900 Subject: [PATCH 1/9] Add test for issue-29265 --- src/test/ui/issues/auxiliary/issue-29265.rs | 9 +++++++++ src/test/ui/issues/issue-29265.rs | 10 ++++++++++ 2 files changed, 19 insertions(+) create mode 100644 src/test/ui/issues/auxiliary/issue-29265.rs create mode 100644 src/test/ui/issues/issue-29265.rs diff --git a/src/test/ui/issues/auxiliary/issue-29265.rs b/src/test/ui/issues/auxiliary/issue-29265.rs new file mode 100644 index 0000000000000..6d26002a2e707 --- /dev/null +++ b/src/test/ui/issues/auxiliary/issue-29265.rs @@ -0,0 +1,9 @@ +#![crate_type = "lib"] + +pub struct SomeType { + pub some_member: usize, +} + +pub static SOME_VALUE: SomeType = SomeType { + some_member: 1, +}; diff --git a/src/test/ui/issues/issue-29265.rs b/src/test/ui/issues/issue-29265.rs new file mode 100644 index 0000000000000..f554c4d16c7d1 --- /dev/null +++ b/src/test/ui/issues/issue-29265.rs @@ -0,0 +1,10 @@ +// aux-build:issue-29265.rs +// check-pass + +extern crate issue_29265 as lib; + +static _UNUSED: &'static lib::SomeType = &lib::SOME_VALUE; + +fn main() { + vec![0u8; lib::SOME_VALUE.some_member]; +} From 620567d87ed578587cbbc6bad851576507283544 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Sun, 4 Aug 2019 20:20:40 +0900 Subject: [PATCH 2/9] Add test for issue-49544 --- src/test/ui/issues/auxiliary/issue-49544.rs | 7 +++++++ src/test/ui/issues/issue-49544.rs | 9 +++++++++ 2 files changed, 16 insertions(+) create mode 100644 src/test/ui/issues/auxiliary/issue-49544.rs create mode 100644 src/test/ui/issues/issue-49544.rs diff --git a/src/test/ui/issues/auxiliary/issue-49544.rs b/src/test/ui/issues/auxiliary/issue-49544.rs new file mode 100644 index 0000000000000..f8b3a3fba1e4a --- /dev/null +++ b/src/test/ui/issues/auxiliary/issue-49544.rs @@ -0,0 +1,7 @@ +#![crate_type = "lib"] + +pub fn foo() -> Vec { + std::env::args() + .skip(1) + .collect() +} diff --git a/src/test/ui/issues/issue-49544.rs b/src/test/ui/issues/issue-49544.rs new file mode 100644 index 0000000000000..ed356275fc135 --- /dev/null +++ b/src/test/ui/issues/issue-49544.rs @@ -0,0 +1,9 @@ +// aux-build:issue-49544.rs +// check-pass + +extern crate issue_49544; +use issue_49544::foo; + +fn main() { + let _ = foo(); +} From 92e4e8e7836e5a505dc466039135b75252e5b1f6 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Sun, 4 Aug 2019 21:22:42 +0900 Subject: [PATCH 3/9] Add test for issue-37433 --- src/test/ui/issues/issue-37433.rs | 8 ++++++++ src/test/ui/issues/issue-37433.stderr | 8 ++++++++ 2 files changed, 16 insertions(+) create mode 100644 src/test/ui/issues/issue-37433.rs create mode 100644 src/test/ui/issues/issue-37433.stderr diff --git a/src/test/ui/issues/issue-37433.rs b/src/test/ui/issues/issue-37433.rs new file mode 100644 index 0000000000000..784e6ccdac089 --- /dev/null +++ b/src/test/ui/issues/issue-37433.rs @@ -0,0 +1,8 @@ +#![feature(asm)] + +fn main() { + unsafe { + asm!("" :: "r"("")); + //~^ ERROR: invalid value for constraint in inline assembly + } +} diff --git a/src/test/ui/issues/issue-37433.stderr b/src/test/ui/issues/issue-37433.stderr new file mode 100644 index 0000000000000..af64193330198 --- /dev/null +++ b/src/test/ui/issues/issue-37433.stderr @@ -0,0 +1,8 @@ +error[E0669]: invalid value for constraint in inline assembly + --> $DIR/issue-37433.rs:5:24 + | +LL | asm!("" :: "r"("")); + | ^^ + +error: aborting due to previous error + From e54b575dea8f9e075088269a9f7b3347f10ffc4e Mon Sep 17 00:00:00 2001 From: Marco A L Barbosa Date: Tue, 30 Jul 2019 16:31:26 -0300 Subject: [PATCH 4/9] Use libunwind from llvm-project submodule for musl targets --- src/bootstrap/sanity.rs | 4 ---- src/ci/docker/scripts/musl-toolchain.sh | 26 ------------------------- src/ci/docker/scripts/musl.sh | 26 ++----------------------- src/libunwind/Cargo.toml | 4 ++-- src/libunwind/build.rs | 13 +++++++++---- 5 files changed, 13 insertions(+), 60 deletions(-) diff --git a/src/bootstrap/sanity.rs b/src/bootstrap/sanity.rs index 4e3930c8da7fc..bffe748f37cc1 100644 --- a/src/bootstrap/sanity.rs +++ b/src/bootstrap/sanity.rs @@ -202,10 +202,6 @@ pub fn check(build: &mut Build) { panic!("couldn't find libc.a in musl dir: {}", root.join("lib").display()); } - if fs::metadata(root.join("lib/libunwind.a")).is_err() { - panic!("couldn't find libunwind.a in musl dir: {}", - root.join("lib").display()); - } } None => { panic!("when targeting MUSL either the rust.musl-root \ diff --git a/src/ci/docker/scripts/musl-toolchain.sh b/src/ci/docker/scripts/musl-toolchain.sh index 55899fa6c3e69..74ba2f0eadb25 100644 --- a/src/ci/docker/scripts/musl-toolchain.sh +++ b/src/ci/docker/scripts/musl-toolchain.sh @@ -54,29 +54,3 @@ if [ "$REPLACE_CC" = "1" ]; then ln -s $TARGET-g++ /usr/local/bin/$exec done fi - -export CC=$TARGET-gcc -export CXX=$TARGET-g++ - -LLVM=70 - -# may have been downloaded in a previous run -if [ ! -d libunwind-release_$LLVM ]; then - curl -L https://github.com/llvm-mirror/llvm/archive/release_$LLVM.tar.gz | tar xzf - - curl -L https://github.com/llvm-mirror/libunwind/archive/release_$LLVM.tar.gz | tar xzf - -fi - -# fixme(mati865): Replace it with https://github.com/rust-lang/rust/pull/59089 -mkdir libunwind-build -cd libunwind-build -cmake ../libunwind-release_$LLVM \ - -DLLVM_PATH=/build/llvm-release_$LLVM \ - -DLIBUNWIND_ENABLE_SHARED=0 \ - -DCMAKE_C_COMPILER=$CC \ - -DCMAKE_CXX_COMPILER=$CXX \ - -DCMAKE_C_FLAGS="$CFLAGS" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS" - -hide_output make -j$(nproc) -cp lib/libunwind.a $OUTPUT/$TARGET/lib -cd - && rm -rf libunwind-build diff --git a/src/ci/docker/scripts/musl.sh b/src/ci/docker/scripts/musl.sh index c2cf77d56cb3b..d847c407aba67 100644 --- a/src/ci/docker/scripts/musl.sh +++ b/src/ci/docker/scripts/musl.sh @@ -20,6 +20,8 @@ exit 1 TAG=$1 shift +# Ancient binutils versions don't understand debug symbols produced by more recent tools. +# Apparently applying `-fPIC` everywhere allows them to link successfully. export CFLAGS="-fPIC $CFLAGS" MUSL=musl-1.1.22 @@ -38,27 +40,3 @@ else fi hide_output make install hide_output make clean - -cd .. - -LLVM=70 - -# may have been downloaded in a previous run -if [ ! -d libunwind-release_$LLVM ]; then - curl -L https://github.com/llvm-mirror/llvm/archive/release_$LLVM.tar.gz | tar xzf - - curl -L https://github.com/llvm-mirror/libunwind/archive/release_$LLVM.tar.gz | tar xzf - -fi - -mkdir libunwind-build -cd libunwind-build -cmake ../libunwind-release_$LLVM \ - -DLLVM_PATH=/build/llvm-release_$LLVM \ - -DLIBUNWIND_ENABLE_SHARED=0 \ - -DCMAKE_C_COMPILER=$CC \ - -DCMAKE_CXX_COMPILER=$CXX \ - -DCMAKE_C_FLAGS="$CFLAGS" \ - -DCMAKE_CXX_FLAGS="$CXXFLAGS" - -hide_output make -j$(nproc) -cp lib/libunwind.a /musl-$TAG/lib -cd ../ && rm -rf libunwind-build diff --git a/src/libunwind/Cargo.toml b/src/libunwind/Cargo.toml index f0f1bab425d7a..f10df8c85ba0a 100644 --- a/src/libunwind/Cargo.toml +++ b/src/libunwind/Cargo.toml @@ -22,7 +22,7 @@ compiler_builtins = "0.1.0" cfg-if = "0.1.8" [build-dependencies] -cc = { optional = true, version = "1.0.1" } +cc = { version = "1.0.1" } [features] -llvm-libunwind = ["cc"] +llvm-libunwind = [] diff --git a/src/libunwind/build.rs b/src/libunwind/build.rs index 3545a691a1515..0999e39f057a4 100644 --- a/src/libunwind/build.rs +++ b/src/libunwind/build.rs @@ -7,14 +7,14 @@ fn main() { // FIXME: the not(bootstrap) part is needed because of the issue addressed by #62286, // and could be removed once that change is in beta. if cfg!(all(not(bootstrap), feature = "llvm-libunwind")) && - (target.contains("linux") || + (target.contains("linux") && !target.contains("musl") || target.contains("fuchsia")) { // Build the unwinding from libunwind C/C++ source code. - #[cfg(all(not(bootstrap), feature = "llvm-libunwind"))] llvm_libunwind::compile(); } else if target.contains("linux") { if target.contains("musl") { - // musl is handled in lib.rs + // linking for musl is handled in lib.rs + llvm_libunwind::compile(); } else if !target.contains("android") { println!("cargo:rustc-link-lib=gcc_s"); } @@ -46,7 +46,6 @@ fn main() { } } -#[cfg(all(not(bootstrap), feature = "llvm-libunwind"))] mod llvm_libunwind { use std::env; use std::path::Path; @@ -98,6 +97,12 @@ mod llvm_libunwind { cfg.file(root.join("src").join(src)); } + if target_env == "musl" { + // linking for musl is handled in lib.rs + cfg.cargo_metadata(false); + println!("cargo:rustc-link-search=native={}", env::var("OUT_DIR").unwrap()); + } + cfg.compile("unwind"); } } From 93cf95bedd0e45d2ec478ca911635d3d2883d932 Mon Sep 17 00:00:00 2001 From: topecongiro Date: Tue, 6 Aug 2019 11:18:12 +0900 Subject: [PATCH 5/9] Update rustfmt to 1.4.4 --- Cargo.lock | 4 ++-- src/tools/rustfmt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 972276bb38149..2069f8276b59a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2501,7 +2501,7 @@ dependencies = [ "rustc-serialize 0.3.24 (registry+https://github.com/rust-lang/crates.io-index)", "rustc-workspace-hack 1.0.0", "rustc_tools_util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", - "rustfmt-nightly 1.4.3", + "rustfmt-nightly 1.4.4", "serde 1.0.92 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.81 (registry+https://github.com/rust-lang/crates.io-index)", "serde_ignored 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", @@ -3286,7 +3286,7 @@ dependencies = [ [[package]] name = "rustfmt-nightly" -version = "1.4.3" +version = "1.4.4" dependencies = [ "annotate-snippets 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)", "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", diff --git a/src/tools/rustfmt b/src/tools/rustfmt index 3adfb08afe3cb..0462008de87d2 160000 --- a/src/tools/rustfmt +++ b/src/tools/rustfmt @@ -1 +1 @@ -Subproject commit 3adfb08afe3cb6a8c055e581dea87808464d1381 +Subproject commit 0462008de87d2757e8ef1dc26f2c54dd789a59a8 From 418bf968f07f4d099a7536bd5f6ce0cb90709820 Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Tue, 6 Aug 2019 20:05:22 +0900 Subject: [PATCH 6/9] Ignore no support targets --- src/test/ui/issues/issue-37433.rs | 2 ++ src/test/ui/issues/issue-37433.stderr | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/ui/issues/issue-37433.rs b/src/test/ui/issues/issue-37433.rs index 784e6ccdac089..d3663e24e60a2 100644 --- a/src/test/ui/issues/issue-37433.rs +++ b/src/test/ui/issues/issue-37433.rs @@ -1,3 +1,5 @@ +// ignore-emscripten no asm! support + #![feature(asm)] fn main() { diff --git a/src/test/ui/issues/issue-37433.stderr b/src/test/ui/issues/issue-37433.stderr index af64193330198..eec0446902595 100644 --- a/src/test/ui/issues/issue-37433.stderr +++ b/src/test/ui/issues/issue-37433.stderr @@ -1,5 +1,5 @@ error[E0669]: invalid value for constraint in inline assembly - --> $DIR/issue-37433.rs:5:24 + --> $DIR/issue-37433.rs:7:24 | LL | asm!("" :: "r"("")); | ^^ From 70374c95f9f0a723f2560b8c8aee3b94d99ac36b Mon Sep 17 00:00:00 2001 From: Mark Mansi Date: Tue, 6 Aug 2019 13:53:51 -0500 Subject: [PATCH 7/9] update to rustc-guide that passes toolstate --- src/doc/rustc-guide | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-guide b/src/doc/rustc-guide index b5a2b9353c661..07dbcdec1888b 160000 --- a/src/doc/rustc-guide +++ b/src/doc/rustc-guide @@ -1 +1 @@ -Subproject commit b5a2b9353c661000378415ecfeb757eb7df42d66 +Subproject commit 07dbcdec1888b2a5e9e78f4828c52417c49e0398 From a411eaf0c85624be11209ee2f96aae3db5eafda9 Mon Sep 17 00:00:00 2001 From: Mark Mansi Date: Tue, 6 Aug 2019 17:19:01 -0500 Subject: [PATCH 8/9] passify tidy --- src/doc/rustc-guide | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/doc/rustc-guide b/src/doc/rustc-guide index 07dbcdec1888b..6f4ba673ff9d4 160000 --- a/src/doc/rustc-guide +++ b/src/doc/rustc-guide @@ -1 +1 @@ -Subproject commit 07dbcdec1888b2a5e9e78f4828c52417c49e0398 +Subproject commit 6f4ba673ff9d4613e98415bc095347a6a0031e9c From 811c3040299beb2cc90dc143b90af32dc78b0a3a Mon Sep 17 00:00:00 2001 From: Ryan Gorup Date: Tue, 6 Aug 2019 09:54:30 -0700 Subject: [PATCH 9/9] Test conditional initialization validation in async fns --- ...onditional-and-guaranteed-initialization.rs | 18 ++++++++++++++++++ .../no-non-guaranteed-initialization.rs | 16 ++++++++++++++++ .../no-non-guaranteed-initialization.stderr | 9 +++++++++ 3 files changed, 43 insertions(+) create mode 100644 src/test/ui/async-await/conditional-and-guaranteed-initialization.rs create mode 100644 src/test/ui/async-await/no-non-guaranteed-initialization.rs create mode 100644 src/test/ui/async-await/no-non-guaranteed-initialization.stderr diff --git a/src/test/ui/async-await/conditional-and-guaranteed-initialization.rs b/src/test/ui/async-await/conditional-and-guaranteed-initialization.rs new file mode 100644 index 0000000000000..a5947e7f71870 --- /dev/null +++ b/src/test/ui/async-await/conditional-and-guaranteed-initialization.rs @@ -0,0 +1,18 @@ +// check-pass +// edition:2018 +// compile-flags: --crate-type lib + +#![feature(async_await)] + +async fn conditional_and_guaranteed_initialization(x: usize) -> usize { + let y; + if x > 5 { + y = echo(10).await; + } else { + y = get_something().await; + } + y +} + +async fn echo(x: usize) -> usize { x } +async fn get_something() -> usize { 10 } diff --git a/src/test/ui/async-await/no-non-guaranteed-initialization.rs b/src/test/ui/async-await/no-non-guaranteed-initialization.rs new file mode 100644 index 0000000000000..a916afb6b09b7 --- /dev/null +++ b/src/test/ui/async-await/no-non-guaranteed-initialization.rs @@ -0,0 +1,16 @@ +// compile-fail +// edition:2018 +// compile-flags: --crate-type lib + +#![feature(async_await)] + +async fn no_non_guaranteed_initialization(x: usize) -> usize { + let y; + if x > 5 { + y = echo(10).await; + } + y + //~^ use of possibly uninitialized variable: `y` +} + +async fn echo(x: usize) -> usize { x + 1 } diff --git a/src/test/ui/async-await/no-non-guaranteed-initialization.stderr b/src/test/ui/async-await/no-non-guaranteed-initialization.stderr new file mode 100644 index 0000000000000..fb94522cac08d --- /dev/null +++ b/src/test/ui/async-await/no-non-guaranteed-initialization.stderr @@ -0,0 +1,9 @@ +error[E0381]: use of possibly uninitialized variable: `y` + --> $DIR/no-non-guaranteed-initialization.rs:12:5 + | +LL | y + | ^ use of possibly uninitialized `y` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0381`.