From 3acfa81e6b619cf2d6af896d605495f8e2ab9d41 Mon Sep 17 00:00:00 2001 From: Marco A L Barbosa Date: Fri, 5 May 2017 17:12:05 -0300 Subject: [PATCH 01/23] bootstrap: openssl android support --- src/bootstrap/native.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/bootstrap/native.rs b/src/bootstrap/native.rs index 3d87f701b2a56..67edd70a1565a 100644 --- a/src/bootstrap/native.rs +++ b/src/bootstrap/native.rs @@ -309,11 +309,15 @@ pub fn openssl(build: &Build, target: &str) { configure.arg("no-ssl3"); let os = match target { + "aarch64-linux-android" => "linux-aarch64", "aarch64-unknown-linux-gnu" => "linux-aarch64", + "arm-linux-androideabi" => "android", "arm-unknown-linux-gnueabi" => "linux-armv4", "arm-unknown-linux-gnueabihf" => "linux-armv4", + "armv7-linux-androideabi" => "android-armv7", "armv7-unknown-linux-gnueabihf" => "linux-armv4", "i686-apple-darwin" => "darwin-i386-cc", + "i686-linux-android" => "android-x86", "i686-unknown-freebsd" => "BSD-x86-elf", "i686-unknown-linux-gnu" => "linux-elf", "i686-unknown-linux-musl" => "linux-elf", @@ -326,6 +330,7 @@ pub fn openssl(build: &Build, target: &str) { "powerpc64le-unknown-linux-gnu" => "linux-ppc64le", "s390x-unknown-linux-gnu" => "linux64-s390x", "x86_64-apple-darwin" => "darwin64-x86_64-cc", + "x86_64-linux-android" => "linux-x86_64", "x86_64-unknown-freebsd" => "BSD-x86_64", "x86_64-unknown-linux-gnu" => "linux-x86_64", "x86_64-unknown-linux-musl" => "linux-x86_64", @@ -337,6 +342,18 @@ pub fn openssl(build: &Build, target: &str) { for flag in build.cflags(target) { configure.arg(flag); } + // There is no specific os target for android aarch64 or x86_64, + // so we need to pass some extra cflags + if target == "aarch64-linux-android" || target == "x86_64-linux-android" { + configure.arg("-mandroid"); + configure.arg("-fomit-frame-pointer"); + } + // Make PIE binaries + // Non-PIE linker support was removed in Lollipop + // https://source.android.com/security/enhancements/enhancements50 + if target == "i686-linux-android" { + configure.arg("no-asm"); + } configure.current_dir(&obj); println!("Configuring openssl for {}", target); build.run_quiet(&mut configure); From cf05cd8abffadd701cab32de43e59b5ac73241f3 Mon Sep 17 00:00:00 2001 From: Dennis Schridde Date: Sun, 7 May 2017 23:20:28 +0200 Subject: [PATCH 02/23] bootstrap: Output name of failed config in case of errors --- src/bootstrap/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bootstrap/config.rs b/src/bootstrap/config.rs index 34fbc33d981af..9c536111811aa 100644 --- a/src/bootstrap/config.rs +++ b/src/bootstrap/config.rs @@ -264,7 +264,7 @@ impl Config { let table = match p.parse() { Some(table) => table, None => { - println!("failed to parse TOML configuration:"); + println!("failed to parse TOML configuration '{}':", file.to_str().unwrap()); for err in p.errors.iter() { let (loline, locol) = p.to_linecol(err.lo); let (hiline, hicol) = p.to_linecol(err.hi); From f383cbf550a50650738fe7e11739c8da9b2a6f5b Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Mon, 8 May 2017 15:01:13 -0700 Subject: [PATCH 03/23] Update to the oxidized rust-installer --- .gitmodules | 2 +- src/Cargo.lock | 165 ++++++++++++++++++++++++++++++++++++- src/Cargo.toml | 1 + src/bootstrap/dist.rs | 46 +++++------ src/bootstrap/step.rs | 13 +++ src/rust-installer | 1 - src/tools/rust-installer | 1 + src/tools/tidy/src/main.rs | 2 +- 8 files changed, 201 insertions(+), 30 deletions(-) delete mode 160000 src/rust-installer create mode 160000 src/tools/rust-installer diff --git a/.gitmodules b/.gitmodules index 7cd896b763f54..791404344ef3a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -13,7 +13,7 @@ path = src/jemalloc url = /~https://github.com/rust-lang/jemalloc.git [submodule "src/rust-installer"] - path = src/rust-installer + path = src/tools/rust-installer url = /~https://github.com/rust-lang/rust-installer.git [submodule "src/liblibc"] path = src/liblibc diff --git a/src/Cargo.lock b/src/Cargo.lock index 3dd8231a49f69..0b6597ce4e836 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -58,6 +58,29 @@ dependencies = [ "winapi 0.2.8 (registry+/~https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "backtrace" +version = "0.3.0" +source = "registry+/~https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace-sys 0.1.10 (registry+/~https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.0 (registry+/~https://github.com/rust-lang/crates.io-index)", + "dbghelp-sys 0.2.0 (registry+/~https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+/~https://github.com/rust-lang/crates.io-index)", + "libc 0.2.21 (registry+/~https://github.com/rust-lang/crates.io-index)", + "rustc-demangle 0.1.4 (registry+/~https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+/~https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "backtrace-sys" +version = "0.1.10" +source = "registry+/~https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gcc 0.3.45 (registry+/~https://github.com/rust-lang/crates.io-index)", + "libc 0.2.21 (registry+/~https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "bitflags" version = "0.5.0" @@ -102,6 +125,11 @@ dependencies = [ name = "cargotest2" version = "0.1.0" +[[package]] +name = "cfg-if" +version = "0.1.0" +source = "registry+/~https://github.com/rust-lang/crates.io-index" + [[package]] name = "clap" version = "2.22.1" @@ -115,6 +143,7 @@ dependencies = [ "unicode-segmentation 1.1.0 (registry+/~https://github.com/rust-lang/crates.io-index)", "unicode-width 0.1.4 (registry+/~https://github.com/rust-lang/crates.io-index)", "vec_map 0.7.0 (registry+/~https://github.com/rust-lang/crates.io-index)", + "yaml-rust 0.3.5 (registry+/~https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -158,6 +187,15 @@ dependencies = [ name = "core" version = "0.0.0" +[[package]] +name = "dbghelp-sys" +version = "0.2.0" +source = "registry+/~https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+/~https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+/~https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "diff" version = "0.1.10" @@ -177,6 +215,14 @@ dependencies = [ "regex 0.2.1 (registry+/~https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "error-chain" +version = "0.10.0" +source = "registry+/~https://github.com/rust-lang/crates.io-index" +dependencies = [ + "backtrace 0.3.0 (registry+/~https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "error_index_generator" version = "0.0.0" @@ -197,6 +243,15 @@ dependencies = [ "gcc 0.3.45 (registry+/~https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "flate2" +version = "0.2.19" +source = "registry+/~https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.21 (registry+/~https://github.com/rust-lang/crates.io-index)", + "miniz-sys 0.1.9 (registry+/~https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "fmt_macros" version = "0.0.0" @@ -224,7 +279,7 @@ name = "handlebars" version = "0.25.2" source = "registry+/~https://github.com/rust-lang/crates.io-index" dependencies = [ - "lazy_static 0.2.5 (registry+/~https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.8 (registry+/~https://github.com/rust-lang/crates.io-index)", "log 0.3.7 (registry+/~https://github.com/rust-lang/crates.io-index)", "pest 0.3.3 (registry+/~https://github.com/rust-lang/crates.io-index)", "quick-error 1.1.0 (registry+/~https://github.com/rust-lang/crates.io-index)", @@ -233,6 +288,21 @@ dependencies = [ "serde_json 0.9.9 (registry+/~https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "installer" +version = "0.0.0" +dependencies = [ + "clap 2.22.1 (registry+/~https://github.com/rust-lang/crates.io-index)", + "error-chain 0.10.0 (registry+/~https://github.com/rust-lang/crates.io-index)", + "flate2 0.2.19 (registry+/~https://github.com/rust-lang/crates.io-index)", + "kernel32-sys 0.2.2 (registry+/~https://github.com/rust-lang/crates.io-index)", + "lazy_static 0.2.8 (registry+/~https://github.com/rust-lang/crates.io-index)", + "tar 0.4.11 (registry+/~https://github.com/rust-lang/crates.io-index)", + "walkdir 1.0.7 (registry+/~https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+/~https://github.com/rust-lang/crates.io-index)", + "xz2 0.1.3 (registry+/~https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "itoa" version = "0.3.1" @@ -249,7 +319,7 @@ dependencies = [ [[package]] name = "lazy_static" -version = "0.2.5" +version = "0.2.8" source = "registry+/~https://github.com/rust-lang/crates.io-index" [[package]] @@ -273,6 +343,16 @@ name = "log" version = "0.3.7" source = "registry+/~https://github.com/rust-lang/crates.io-index" +[[package]] +name = "lzma-sys" +version = "0.1.1" +source = "registry+/~https://github.com/rust-lang/crates.io-index" +dependencies = [ + "filetime 0.1.10 (registry+/~https://github.com/rust-lang/crates.io-index)", + "gcc 0.3.45 (registry+/~https://github.com/rust-lang/crates.io-index)", + "libc 0.2.21 (registry+/~https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "mdbook" version = "0.0.21" @@ -298,6 +378,15 @@ dependencies = [ "libc 0.2.21 (registry+/~https://github.com/rust-lang/crates.io-index)", ] +[[package]] +name = "miniz-sys" +version = "0.1.9" +source = "registry+/~https://github.com/rust-lang/crates.io-index" +dependencies = [ + "gcc 0.3.45 (registry+/~https://github.com/rust-lang/crates.io-index)", + "libc 0.2.21 (registry+/~https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "num-traits" version = "0.1.37" @@ -453,6 +542,11 @@ dependencies = [ "syntax_pos 0.0.0", ] +[[package]] +name = "rustc-demangle" +version = "0.1.4" +source = "registry+/~https://github.com/rust-lang/crates.io-index" + [[package]] name = "rustc-main" version = "0.0.0" @@ -800,6 +894,15 @@ dependencies = [ "syntax_pos 0.0.0", ] +[[package]] +name = "same-file" +version = "0.1.3" +source = "registry+/~https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+/~https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+/~https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "serde" version = "0.9.11" @@ -887,6 +990,16 @@ dependencies = [ "serialize 0.0.0", ] +[[package]] +name = "tar" +version = "0.4.11" +source = "registry+/~https://github.com/rust-lang/crates.io-index" +dependencies = [ + "filetime 0.1.10 (registry+/~https://github.com/rust-lang/crates.io-index)", + "libc 0.2.21 (registry+/~https://github.com/rust-lang/crates.io-index)", + "xattr 0.1.11 (registry+/~https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "term" version = "0.0.0" @@ -980,6 +1093,16 @@ name = "void" version = "1.0.2" source = "registry+/~https://github.com/rust-lang/crates.io-index" +[[package]] +name = "walkdir" +version = "1.0.7" +source = "registry+/~https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+/~https://github.com/rust-lang/crates.io-index)", + "same-file 0.1.3 (registry+/~https://github.com/rust-lang/crates.io-index)", + "winapi 0.2.8 (registry+/~https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "winapi" version = "0.2.8" @@ -990,28 +1113,57 @@ name = "winapi-build" version = "0.1.1" source = "registry+/~https://github.com/rust-lang/crates.io-index" +[[package]] +name = "xattr" +version = "0.1.11" +source = "registry+/~https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.21 (registry+/~https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "xz2" +version = "0.1.3" +source = "registry+/~https://github.com/rust-lang/crates.io-index" +dependencies = [ + "lzma-sys 0.1.1 (registry+/~https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "yaml-rust" +version = "0.3.5" +source = "registry+/~https://github.com/rust-lang/crates.io-index" + [metadata] "checksum aho-corasick 0.6.3 (registry+/~https://github.com/rust-lang/crates.io-index)" = "500909c4f87a9e52355b26626d890833e9e1d53ac566db76c36faa984b889699" "checksum ansi_term 0.9.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "23ac7c30002a5accbf7e8987d0632fa6de155b7c3d39d0067317a391e00a2ef6" "checksum atty 0.2.2 (registry+/~https://github.com/rust-lang/crates.io-index)" = "d912da0db7fa85514874458ca3651fe2cddace8d0b0505571dbdcd41ab490159" +"checksum backtrace 0.3.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "f551bc2ddd53aea015d453ef0b635af89444afa5ed2405dd0b2062ad5d600d80" +"checksum backtrace-sys 0.1.10 (registry+/~https://github.com/rust-lang/crates.io-index)" = "d192fd129132fbc97497c1f2ec2c2c5174e376b95f535199ef4fe0a293d33842" "checksum bitflags 0.5.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "4f67931368edf3a9a51d29886d245f1c3db2f1ef0dcc9e35ff70341b78c10d23" "checksum bitflags 0.8.2 (registry+/~https://github.com/rust-lang/crates.io-index)" = "1370e9fc2a6ae53aea8b7a5110edbd08836ed87c88736dfabccade1c2b44bff4" +"checksum cfg-if 0.1.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "de1e760d7b6535af4241fca8bd8adf68e2e7edacc6b29f5d399050c5e48cf88c" "checksum clap 2.22.1 (registry+/~https://github.com/rust-lang/crates.io-index)" = "e17a4a72ffea176f77d6e2db609c6c919ef221f23862c9915e687fb54d833485" "checksum cmake 0.1.22 (registry+/~https://github.com/rust-lang/crates.io-index)" = "d18d68987ed4c516dcc3e7913659bfa4076f5182eea4a7e0038bb060953e76ac" +"checksum dbghelp-sys 0.2.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "97590ba53bcb8ac28279161ca943a924d1fd4a8fb3fa63302591647c4fc5b850" "checksum diff 0.1.10 (registry+/~https://github.com/rust-lang/crates.io-index)" = "0a515461b6c8c08419850ced27bc29e86166dcdcde8fbe76f8b1f0589bb49472" "checksum dtoa 0.4.1 (registry+/~https://github.com/rust-lang/crates.io-index)" = "80c8b71fd71146990a9742fc06dcbbde19161a267e0ad4e572c35162f4578c90" "checksum env_logger 0.4.2 (registry+/~https://github.com/rust-lang/crates.io-index)" = "e3856f1697098606fc6cb97a93de88ca3f3bc35bb878c725920e6e82ecf05e83" +"checksum error-chain 0.10.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "d9435d864e017c3c6afeac1654189b06cdb491cf2ff73dbf0d73b0f292f42ff8" "checksum filetime 0.1.10 (registry+/~https://github.com/rust-lang/crates.io-index)" = "5363ab8e4139b8568a6237db5248646e5a8a2f89bd5ccb02092182b11fd3e922" +"checksum flate2 0.2.19 (registry+/~https://github.com/rust-lang/crates.io-index)" = "36df0166e856739905cd3d7e0b210fe818592211a008862599845e012d8d304c" "checksum gcc 0.3.45 (registry+/~https://github.com/rust-lang/crates.io-index)" = "40899336fb50db0c78710f53e87afc54d8c7266fb76262fecc78ca1a7f09deae" "checksum getopts 0.2.14 (registry+/~https://github.com/rust-lang/crates.io-index)" = "d9047cfbd08a437050b363d35ef160452c5fe8ea5187ae0a624708c91581d685" "checksum handlebars 0.25.2 (registry+/~https://github.com/rust-lang/crates.io-index)" = "663e1728d8037fb0d4e13bcd1b1909fb5d913690a9929eb385922df157c2ff8f" "checksum itoa 0.3.1 (registry+/~https://github.com/rust-lang/crates.io-index)" = "eb2f404fbc66fd9aac13e998248505e7ecb2ad8e44ab6388684c5fb11c6c251c" "checksum kernel32-sys 0.2.2 (registry+/~https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum lazy_static 0.2.5 (registry+/~https://github.com/rust-lang/crates.io-index)" = "4732c563b9a21a406565c4747daa7b46742f082911ae4753f390dc9ec7ee1a97" +"checksum lazy_static 0.2.8 (registry+/~https://github.com/rust-lang/crates.io-index)" = "3b37545ab726dd833ec6420aaba8231c5b320814b9029ad585555d2a03e94fbf" "checksum libc 0.2.21 (registry+/~https://github.com/rust-lang/crates.io-index)" = "88ee81885f9f04bff991e306fea7c1c60a5f0f9e409e99f6b40e3311a3363135" "checksum log 0.3.7 (registry+/~https://github.com/rust-lang/crates.io-index)" = "5141eca02775a762cc6cd564d8d2c50f67c0ea3a372cbf1c51592b3e029e10ad" +"checksum lzma-sys 0.1.1 (registry+/~https://github.com/rust-lang/crates.io-index)" = "506a25e3491881f47407458f95429d153437d3a5bc4685c747de69e1ec7e897d" "checksum mdbook 0.0.21 (registry+/~https://github.com/rust-lang/crates.io-index)" = "f1e2e9d848514dcfad4195788d0d42ae5153a477c191d75d5b84fab10f222fbd" "checksum memchr 1.0.1 (registry+/~https://github.com/rust-lang/crates.io-index)" = "1dbccc0e46f1ea47b9f17e6d67c5a96bd27030519c519c9c91327e31275a47b4" +"checksum miniz-sys 0.1.9 (registry+/~https://github.com/rust-lang/crates.io-index)" = "28eaee17666671fa872e567547e8428e83308ebe5808cdf6a0e28397dbe2c726" "checksum num-traits 0.1.37 (registry+/~https://github.com/rust-lang/crates.io-index)" = "e1cbfa3781f3fe73dc05321bed52a06d2d491eaa764c52335cf4399f046ece99" "checksum num_cpus 1.4.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "ca313f1862c7ec3e0dfe8ace9fa91b1d9cb5c84ace3d00f5ec4216238e93c167" "checksum open 1.2.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "3478ed1686bd1300c8a981a940abc92b06fac9cbef747f4c668d4e032ff7b842" @@ -1023,10 +1175,13 @@ source = "registry+/~https://github.com/rust-lang/crates.io-index" "checksum regex-syntax 0.4.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "2f9191b1f57603095f105d317e375d19b1c9c5c3185ea9633a99a6dcbed04457" "checksum rls-data 0.3.1 (registry+/~https://github.com/rust-lang/crates.io-index)" = "fc4277ce3c57f456b11fe3145b181a844a25201bab5cbaa1978457e6e2f27d47" "checksum rls-span 0.4.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "5d7c7046dc6a92f2ae02ed302746db4382e75131b9ce20ce967259f6b5867a6a" +"checksum rustc-demangle 0.1.4 (registry+/~https://github.com/rust-lang/crates.io-index)" = "3058a43ada2c2d0b92b3ae38007a2d0fa5e9db971be260e0171408a4ff471c95" "checksum rustc-serialize 0.3.23 (registry+/~https://github.com/rust-lang/crates.io-index)" = "684ce48436d6465300c9ea783b6b14c4361d6b8dcbb1375b486a69cc19e2dfb0" +"checksum same-file 0.1.3 (registry+/~https://github.com/rust-lang/crates.io-index)" = "d931a44fdaa43b8637009e7632a02adc4f2b2e0733c08caa4cf00e8da4a117a7" "checksum serde 0.9.11 (registry+/~https://github.com/rust-lang/crates.io-index)" = "a702319c807c016e51f672e5c77d6f0b46afddd744b5e437d6b8436b888b458f" "checksum serde_json 0.9.9 (registry+/~https://github.com/rust-lang/crates.io-index)" = "dbc45439552eb8fb86907a2c41c1fd0ef97458efb87ff7f878db466eb581824e" "checksum strsim 0.6.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694" +"checksum tar 0.4.11 (registry+/~https://github.com/rust-lang/crates.io-index)" = "c2374f318bbe2c5ac6c83dd6240d5f1a73106f72d39b3f7d6f8d8637c7b425d8" "checksum term_size 0.2.3 (registry+/~https://github.com/rust-lang/crates.io-index)" = "07b6c1ac5b3fffd75073276bca1ceed01f67a28537097a2a9539e116e50fb21a" "checksum thread-id 3.0.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "4437c97558c70d129e40629a5b385b3fb1ffac301e63941335e4d354081ec14a" "checksum thread_local 0.3.3 (registry+/~https://github.com/rust-lang/crates.io-index)" = "c85048c6260d17cf486ceae3282d9fb6b90be220bf5b28c400f5485ffc29f0c7" @@ -1038,5 +1193,9 @@ source = "registry+/~https://github.com/rust-lang/crates.io-index" "checksum utf8-ranges 1.0.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "662fab6525a98beff2921d7f61a39e7d59e0b425ebc7d0d9e66d316e55124122" "checksum vec_map 0.7.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "f8cdc8b93bd0198ed872357fb2e667f7125646b1762f16d60b2c96350d361897" "checksum void 1.0.2 (registry+/~https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" +"checksum walkdir 1.0.7 (registry+/~https://github.com/rust-lang/crates.io-index)" = "bb08f9e670fab86099470b97cd2b252d6527f0b3cc1401acdb595ffc9dd288ff" "checksum winapi 0.2.8 (registry+/~https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" "checksum winapi-build 0.1.1 (registry+/~https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" +"checksum xattr 0.1.11 (registry+/~https://github.com/rust-lang/crates.io-index)" = "5f04de8a1346489a2f9e9bd8526b73d135ec554227b17568456e86aa35b6f3fc" +"checksum xz2 0.1.3 (registry+/~https://github.com/rust-lang/crates.io-index)" = "e9510bdf100731599107c61f77daf46713a69a568f75458999c1f9dbf6ba25b0" +"checksum yaml-rust 0.3.5 (registry+/~https://github.com/rust-lang/crates.io-index)" = "e66366e18dc58b46801afbf2ca7661a9f59cc8c5962c29892b6039b4f86fa992" diff --git a/src/Cargo.toml b/src/Cargo.toml index 9aca3e134d655..99e8b9f256afc 100644 --- a/src/Cargo.toml +++ b/src/Cargo.toml @@ -13,6 +13,7 @@ members = [ "tools/build-manifest", "tools/remote-test-client", "tools/remote-test-server", + "tools/rust-installer", ] # These projects have their own Cargo.lock diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs index 1b69f7413b569..028bfe3408f6d 100644 --- a/src/bootstrap/dist.rs +++ b/src/bootstrap/dist.rs @@ -26,12 +26,6 @@ use std::process::{Command, Stdio}; use build_helper::output; -#[cfg(not(target_os = "solaris"))] -const SH_CMD: &'static str = "sh"; -// On Solaris, sh is the historical bourne shell, not a POSIX shell, or bash. -#[cfg(target_os = "solaris")] -const SH_CMD: &'static str = "bash"; - use {Build, Compiler, Mode}; use channel; use util::{cp_r, libdir, is_dylib, cp_filtered, copy, exe}; @@ -55,6 +49,10 @@ pub fn tmpdir(build: &Build) -> PathBuf { build.out.join("tmp/dist") } +fn rust_installer(build: &Build) -> Command { + build.tool_cmd(&Compiler::new(0, &build.config.build), "rust-installer") +} + /// Builds the `rust-docs` installer component. /// /// Slurps up documentation from the `stage`'s `host`. @@ -74,8 +72,8 @@ pub fn docs(build: &Build, stage: u32, host: &str) { let src = build.out.join(host).join("doc"); cp_r(&src, &dst); - let mut cmd = Command::new(SH_CMD); - cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh"))) + let mut cmd = rust_installer(build); + cmd.arg("generate") .arg("--product-name=Rust-Documentation") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=Rust-documentation-is-installed.") @@ -124,8 +122,8 @@ pub fn mingw(build: &Build, host: &str) { .arg(host); build.run(&mut cmd); - let mut cmd = Command::new(SH_CMD); - cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh"))) + let mut cmd = rust_installer(build); + cmd.arg("generate") .arg("--product-name=Rust-MinGW") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=Rust-MinGW-is-installed.") @@ -190,8 +188,8 @@ pub fn rustc(build: &Build, stage: u32, host: &str) { } // Finally, wrap everything up in a nice tarball! - let mut cmd = Command::new(SH_CMD); - cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh"))) + let mut cmd = rust_installer(build); + cmd.arg("generate") .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=Rust-is-ready-to-roll.") @@ -300,8 +298,8 @@ pub fn std(build: &Build, compiler: &Compiler, target: &str) { let src = build.sysroot(compiler).join("lib/rustlib"); cp_r(&src.join(target), &dst); - let mut cmd = Command::new(SH_CMD); - cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh"))) + let mut cmd = rust_installer(build); + cmd.arg("generate") .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=std-is-standing-at-the-ready.") @@ -356,8 +354,8 @@ pub fn analysis(build: &Build, compiler: &Compiler, target: &str) { println!("image_src: {:?}, dst: {:?}", image_src, dst); cp_r(&image_src, &dst); - let mut cmd = Command::new(SH_CMD); - cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh"))) + let mut cmd = rust_installer(build); + cmd.arg("generate") .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=save-analysis-saved.") @@ -521,8 +519,8 @@ pub fn rust_src(build: &Build) { } // Create source tarball in rust-installer format - let mut cmd = Command::new(SH_CMD); - cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh"))) + let mut cmd = rust_installer(build); + cmd.arg("generate") .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=Awesome-Source.") @@ -622,8 +620,8 @@ pub fn cargo(build: &Build, stage: u32, target: &str) { t!(t!(File::create(overlay.join("version"))).write_all(version.as_bytes())); // Generate the installer tarball - let mut cmd = Command::new("sh"); - cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh"))) + let mut cmd = rust_installer(build); + cmd.arg("generate") .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=Rust-is-ready-to-roll.") @@ -671,8 +669,8 @@ pub fn rls(build: &Build, stage: u32, target: &str) { t!(t!(File::create(overlay.join("version"))).write_all(version.as_bytes())); // Generate the installer tarball - let mut cmd = Command::new("sh"); - cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/gen-installer.sh"))) + let mut cmd = rust_installer(build); + cmd.arg("generate") .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=RLS-ready-to-serve.") @@ -742,8 +740,8 @@ pub fn extended(build: &Build, stage: u32, target: &str) { input_tarballs.push_str(&sanitize_sh(&mingw_installer)); } - let mut cmd = Command::new(SH_CMD); - cmd.arg(sanitize_sh(&build.src.join("src/rust-installer/combine-installers.sh"))) + let mut cmd = rust_installer(build); + cmd.arg("combine") .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=Rust-is-ready-to-roll.") diff --git a/src/bootstrap/step.rs b/src/bootstrap/step.rs index 970c0bc565d86..99f0e17abab3e 100644 --- a/src/bootstrap/step.rs +++ b/src/bootstrap/step.rs @@ -574,6 +574,10 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules { .dep(|s| s.name("maybe-clean-tools")) .dep(|s| s.name("libstd-tool")) .run(move |s| compile::tool(build, s.stage, s.target, "remote-test-client")); + rules.build("tool-rust-installer", "src/tools/rust-installer") + .dep(|s| s.name("maybe-clean-tools")) + .dep(|s| s.name("libstd-tool")) + .run(move |s| compile::tool(build, s.stage, s.target, "rust-installer")); rules.build("tool-cargo", "src/tools/cargo") .host(true) .default(build.config.extended) @@ -704,6 +708,7 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules { .host(true) .only_host_build(true) .default(true) + .dep(|s| s.name("tool-rust-installer").stage(0)) .run(move |s| dist::rustc(build, s.stage, s.target)); rules.dist("dist-std", "src/libstd") .dep(move |s| { @@ -718,10 +723,12 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules { }) .default(true) .only_host_build(true) + .dep(|s| s.name("tool-rust-installer").stage(0)) .run(move |s| dist::std(build, &s.compiler(), s.target)); rules.dist("dist-mingw", "path/to/nowhere") .default(true) .only_host_build(true) + .dep(|s| s.name("tool-rust-installer").stage(0)) .run(move |s| { if s.target.contains("pc-windows-gnu") { dist::mingw(build, s.target) @@ -732,21 +739,25 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules { .host(true) .only_build(true) .only_host_build(true) + .dep(|s| s.name("tool-rust-installer").stage(0)) .run(move |_| dist::rust_src(build)); rules.dist("dist-docs", "src/doc") .default(true) .only_host_build(true) .dep(|s| s.name("default:doc")) + .dep(|s| s.name("tool-rust-installer").stage(0)) .run(move |s| dist::docs(build, s.stage, s.target)); rules.dist("dist-analysis", "analysis") .default(build.config.extended) .dep(|s| s.name("dist-std")) .only_host_build(true) + .dep(|s| s.name("tool-rust-installer").stage(0)) .run(move |s| dist::analysis(build, &s.compiler(), s.target)); rules.dist("dist-rls", "rls") .host(true) .only_host_build(true) .dep(|s| s.name("tool-rls")) + .dep(|s| s.name("tool-rust-installer").stage(0)) .run(move |s| dist::rls(build, s.stage, s.target)); rules.dist("install", "path/to/nowhere") .dep(|s| s.name("default:dist")) @@ -755,6 +766,7 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules { .host(true) .only_host_build(true) .dep(|s| s.name("tool-cargo")) + .dep(|s| s.name("tool-rust-installer").stage(0)) .run(move |s| dist::cargo(build, s.stage, s.target)); rules.dist("dist-extended", "extended") .default(build.config.extended) @@ -767,6 +779,7 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules { .dep(|d| d.name("dist-cargo")) .dep(|d| d.name("dist-rls")) .dep(|d| d.name("dist-analysis")) + .dep(|s| s.name("tool-rust-installer").stage(0)) .run(move |s| dist::extended(build, s.stage, s.target)); rules.dist("dist-sign", "hash-and-sign") diff --git a/src/rust-installer b/src/rust-installer deleted file mode 160000 index 2e6417f6af521..0000000000000 --- a/src/rust-installer +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 2e6417f6af5218a29a8ee72ed17af085560b9b9c diff --git a/src/tools/rust-installer b/src/tools/rust-installer new file mode 160000 index 0000000000000..b787d33b0eb4d --- /dev/null +++ b/src/tools/rust-installer @@ -0,0 +1 @@ +Subproject commit b787d33b0eb4dbb4ffb7de71af1027a782dccf0b diff --git a/src/tools/tidy/src/main.rs b/src/tools/tidy/src/main.rs index f14a6a03893b3..6b666fa809f7a 100644 --- a/src/tools/tidy/src/main.rs +++ b/src/tools/tidy/src/main.rs @@ -81,12 +81,12 @@ fn filter_dirs(path: &Path) -> bool { "src/libbacktrace", "src/compiler-rt", "src/rustllvm", - "src/rust-installer", "src/liblibc", "src/vendor", "src/rt/hoedown", "src/tools/cargo", "src/tools/rls", + "src/tools/rust-installer", ]; skip.iter().any(|p| path.ends_with(p)) } From c9b2410fe8ae757f762c83e3486d16ae7f904445 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Mon, 8 May 2017 15:23:30 -0700 Subject: [PATCH 04/23] Use "rust-installer tarball" to create rustc-src too This gives us an extra rustc-src.tar.xz, which is 33% smaller than the .tar.gz! --- src/bootstrap/dist.rs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs index 028bfe3408f6d..254b817b847a3 100644 --- a/src/bootstrap/dist.rs +++ b/src/bootstrap/dist.rs @@ -469,13 +469,17 @@ pub fn rust_src(build: &Build) { write_file(&plain_dst_src.join("version"), build.rust_version().as_bytes()); // Create plain source tarball - let tarball = rust_src_location(build); + let mut tarball = rust_src_location(build); + tarball.set_extension(""); // strip .gz + tarball.set_extension(""); // strip .tar if let Some(dir) = tarball.parent() { t!(fs::create_dir_all(dir)); } - let mut cmd = Command::new("tar"); - cmd.arg("-czf").arg(sanitize_sh(&tarball)) - .arg(&plain_name) + let mut cmd = rust_installer(build); + cmd.arg("tarball") + .arg("--input").arg(&plain_name) + .arg("--output").arg(sanitize_sh(&tarball)) + .arg("--work-dir=.") .current_dir(tmpdir(build)); build.run(&mut cmd); From defcfb21f1a235153ecc03444f0e7b779de0858f Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Tue, 9 May 2017 10:55:47 -0700 Subject: [PATCH 05/23] Remove wrong or outdated info from CString docs. --- src/libstd/ffi/c_str.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/libstd/ffi/c_str.rs b/src/libstd/ffi/c_str.rs index 29f977ecd8c33..44b62593fa3a6 100644 --- a/src/libstd/ffi/c_str.rs +++ b/src/libstd/ffi/c_str.rs @@ -30,12 +30,10 @@ use str::{self, Utf8Error}; /// type is a static guarantee that the underlying bytes contain no interior 0 /// bytes and the final byte is 0. /// -/// A `CString` is created from either a byte slice or a byte vector. After -/// being created, a `CString` predominately inherits all of its methods from -/// the `Deref` implementation to `[c_char]`. Note that the underlying array -/// is represented as an array of `c_char` as opposed to `u8`. A `u8` slice -/// can be obtained with the `as_bytes` method. Slices produced from a `CString` -/// do *not* contain the trailing nul terminator unless otherwise specified. +/// A `CString` is created from either a byte slice or a byte vector. A `u8` +/// slice can be obtained with the `as_bytes` method. Slices produced from a +/// `CString` do *not* contain the trailing nul terminator unless otherwise +/// specified. /// /// # Examples /// From 8eaff4d848aeee49f3125ccd736942f5b484db3e Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Tue, 9 May 2017 11:43:48 -0700 Subject: [PATCH 06/23] Force tool-rust-installer deps to build-only --- src/bootstrap/step.rs | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/bootstrap/step.rs b/src/bootstrap/step.rs index 99f0e17abab3e..92666e8e63907 100644 --- a/src/bootstrap/step.rs +++ b/src/bootstrap/step.rs @@ -708,7 +708,7 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules { .host(true) .only_host_build(true) .default(true) - .dep(|s| s.name("tool-rust-installer").stage(0)) + .dep(move |s| tool_rust_installer(build, s)) .run(move |s| dist::rustc(build, s.stage, s.target)); rules.dist("dist-std", "src/libstd") .dep(move |s| { @@ -723,12 +723,12 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules { }) .default(true) .only_host_build(true) - .dep(|s| s.name("tool-rust-installer").stage(0)) + .dep(move |s| tool_rust_installer(build, s)) .run(move |s| dist::std(build, &s.compiler(), s.target)); rules.dist("dist-mingw", "path/to/nowhere") .default(true) .only_host_build(true) - .dep(|s| s.name("tool-rust-installer").stage(0)) + .dep(move |s| tool_rust_installer(build, s)) .run(move |s| { if s.target.contains("pc-windows-gnu") { dist::mingw(build, s.target) @@ -739,25 +739,25 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules { .host(true) .only_build(true) .only_host_build(true) - .dep(|s| s.name("tool-rust-installer").stage(0)) + .dep(move |s| tool_rust_installer(build, s)) .run(move |_| dist::rust_src(build)); rules.dist("dist-docs", "src/doc") .default(true) .only_host_build(true) .dep(|s| s.name("default:doc")) - .dep(|s| s.name("tool-rust-installer").stage(0)) + .dep(move |s| tool_rust_installer(build, s)) .run(move |s| dist::docs(build, s.stage, s.target)); rules.dist("dist-analysis", "analysis") .default(build.config.extended) .dep(|s| s.name("dist-std")) .only_host_build(true) - .dep(|s| s.name("tool-rust-installer").stage(0)) + .dep(move |s| tool_rust_installer(build, s)) .run(move |s| dist::analysis(build, &s.compiler(), s.target)); rules.dist("dist-rls", "rls") .host(true) .only_host_build(true) .dep(|s| s.name("tool-rls")) - .dep(|s| s.name("tool-rust-installer").stage(0)) + .dep(move |s| tool_rust_installer(build, s)) .run(move |s| dist::rls(build, s.stage, s.target)); rules.dist("install", "path/to/nowhere") .dep(|s| s.name("default:dist")) @@ -766,7 +766,7 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules { .host(true) .only_host_build(true) .dep(|s| s.name("tool-cargo")) - .dep(|s| s.name("tool-rust-installer").stage(0)) + .dep(move |s| tool_rust_installer(build, s)) .run(move |s| dist::cargo(build, s.stage, s.target)); rules.dist("dist-extended", "extended") .default(build.config.extended) @@ -779,7 +779,7 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules { .dep(|d| d.name("dist-cargo")) .dep(|d| d.name("dist-rls")) .dep(|d| d.name("dist-analysis")) - .dep(|s| s.name("tool-rust-installer").stage(0)) + .dep(move |s| tool_rust_installer(build, s)) .run(move |s| dist::extended(build, s.stage, s.target)); rules.dist("dist-sign", "hash-and-sign") @@ -791,6 +791,14 @@ pub fn build_rules<'a>(build: &'a Build) -> Rules { rules.verify(); return rules; + + /// Helper to depend on a stage0 build-only rust-installer tool. + fn tool_rust_installer<'a>(build: &'a Build, step: &Step<'a>) -> Step<'a> { + step.name("tool-rust-installer") + .host(&build.config.build) + .target(&build.config.build) + .stage(0) + } } #[derive(PartialEq, Eq, Hash, Clone, Debug)] From 99f629a9313a6ac5d7c57fdfa9127a336d0731a8 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 8 May 2017 13:36:26 -0700 Subject: [PATCH 07/23] rustc: Add a new `-Z force-unstable-if-unmarked` flag This commit adds a new `-Z` flag to the compiler for use when bootstrapping the compiler itself. We want to be able to use crates.io crates, but we also want the usage of such crates to be as ergonomic as possible! To that end compiler crates are a little tricky in that the crates.io crates are not annotated as unstable, nor do they expect to pull in unstable dependencies. To cover all these situations it's intended that the compiler will forever now bootstrap with `-Z force-unstable-if-unmarked`. This flags serves a dual purpose of forcing crates.io crates to themselves be unstable while also allowing them to use other "unstable" crates.io crates. This should mean that adding a dependency to compiler no longer requires upstream modification with unstable/staged_api attributes for inclusion! --- src/librustc/middle/cstore.rs | 2 - src/librustc/middle/stability.rs | 81 ++++++++++++++++++++-------- src/librustc/session/config.rs | 2 + src/librustc_driver/driver.rs | 2 +- src/librustc_driver/test.rs | 2 +- src/librustc_metadata/cstore.rs | 9 ---- src/librustc_metadata/cstore_impl.rs | 5 -- 7 files changed, 62 insertions(+), 41 deletions(-) diff --git a/src/librustc/middle/cstore.rs b/src/librustc/middle/cstore.rs index 16b3fcd2f8c32..53e684e34bde1 100644 --- a/src/librustc/middle/cstore.rs +++ b/src/librustc/middle/cstore.rs @@ -239,7 +239,6 @@ pub trait CrateStore { fn export_macros(&self, cnum: CrateNum); fn lang_items(&self, cnum: CrateNum) -> Vec<(DefIndex, usize)>; fn missing_lang_items(&self, cnum: CrateNum) -> Vec; - fn is_staged_api(&self, cnum: CrateNum) -> bool; fn is_allocator(&self, cnum: CrateNum) -> bool; fn is_panic_runtime(&self, cnum: CrateNum) -> bool; fn is_compiler_builtins(&self, cnum: CrateNum) -> bool; @@ -368,7 +367,6 @@ impl CrateStore for DummyCrateStore { { bug!("lang_items") } fn missing_lang_items(&self, cnum: CrateNum) -> Vec { bug!("missing_lang_items") } - fn is_staged_api(&self, cnum: CrateNum) -> bool { bug!("is_staged_api") } fn dep_kind(&self, cnum: CrateNum) -> DepKind { bug!("is_explicitly_linked") } fn export_macros(&self, cnum: CrateNum) { bug!("export_macros") } fn is_allocator(&self, cnum: CrateNum) -> bool { bug!("is_allocator") } diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 198f7420f5d2b..d74877e355a79 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -13,12 +13,12 @@ pub use self::StabilityLevel::*; -use hir::map as hir_map; use lint; use hir::def::Def; use hir::def_id::{CrateNum, CRATE_DEF_INDEX, DefId, DefIndex, LOCAL_CRATE}; use ty::{self, TyCtxt}; use middle::privacy::AccessLevels; +use session::Session; use syntax::symbol::Symbol; use syntax_pos::{Span, DUMMY_SP}; use syntax::ast; @@ -123,7 +123,7 @@ impl<'a, 'tcx: 'a> Annotator<'a, 'tcx> { item_sp: Span, kind: AnnotationKind, visit_children: F) where F: FnOnce(&mut Self) { - if self.index.staged_api[&LOCAL_CRATE] && self.tcx.sess.features.borrow().staged_api { + if self.index.staged_api[&LOCAL_CRATE] { debug!("annotate(id = {:?}, attrs = {:?})", id, attrs); if let Some(..) = attr::find_deprecation(self.tcx.sess.diagnostic(), attrs, item_sp) { self.tcx.sess.span_err(item_sp, "`#[deprecated]` cannot be used in staged api, \ @@ -390,20 +390,36 @@ impl<'a, 'tcx> Index<'tcx> { parent_depr: None, in_trait_impl: false, }; + + // If the `-Z force-unstable-if-unmarked` flag is passed then we provide + // a parent stability annotation which indicates that this is private + // with the `rustc_private` feature. This is intended for use when + // compiling librustc crates themselves so we can leverage crates.io + // while maintaining the invariant that all sysroot crates are unstable + // by default and are unable to be used. + if tcx.sess.opts.debugging_opts.force_unstable_if_unmarked { + let reason = "this crate is being loaded from the sysroot, and \ + unstable location; did you mean to load this crate \ + from crates.io via `Cargo.toml` instead?"; + let stability = tcx.intern_stability(Stability { + level: attr::StabilityLevel::Unstable { + reason: Some(Symbol::intern(reason)), + issue: 27812, + }, + feature: Symbol::intern("rustc_private"), + rustc_depr: None, + }); + annotator.parent_stab = Some(stability); + } + annotator.annotate(ast::CRATE_NODE_ID, &krate.attrs, krate.span, AnnotationKind::Required, |v| intravisit::walk_crate(v, krate)); } - pub fn new(hir_map: &hir_map::Map) -> Index<'tcx> { - let krate = hir_map.krate(); - - let mut is_staged_api = false; - for attr in &krate.attrs { - if attr.path == "stable" || attr.path == "unstable" { - is_staged_api = true; - break - } - } + pub fn new(sess: &Session) -> Index<'tcx> { + let is_staged_api = + sess.opts.debugging_opts.force_unstable_if_unmarked || + sess.features.borrow().staged_api; let mut staged_api = FxHashMap(); staged_api.insert(LOCAL_CRATE, is_staged_api); @@ -496,8 +512,10 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> { } } - let is_staged_api = *self.stability.borrow_mut().staged_api.entry(def_id.krate) - .or_insert_with(|| self.sess.cstore.is_staged_api(def_id.krate)); + let is_staged_api = self.lookup_stability(DefId { + index: CRATE_DEF_INDEX, + ..def_id + }).is_some(); if !is_staged_api { return; } @@ -530,15 +548,32 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> { match stability { Some(&Stability { level: attr::Unstable {ref reason, issue}, ref feature, .. }) => { - if !self.stability.borrow().active_features.contains(feature) { - let msg = match *reason { - Some(ref r) => format!("use of unstable library feature '{}': {}", - feature.as_str(), &r), - None => format!("use of unstable library feature '{}'", &feature) - }; - emit_feature_err(&self.sess.parse_sess, &feature.as_str(), span, - GateIssue::Library(Some(issue)), &msg); + if self.stability.borrow().active_features.contains(feature) { + return } + + // When we're compiling the compiler itself we may pull in + // crates from crates.io, but those crates may depend on other + // crates also pulled in from crates.io. We want to ideally be + // able to compile everything without requiring upstream + // modifications, so in the case that this looks like a + // rustc_private crate (e.g. a compiler crate) and we also have + // the `-Z force-unstable-if-unmarked` flag present (we're + // compiling a compiler crate), then let this missing feature + // annotation slide. + if *feature == "rustc_private" && issue == 27812 { + if self.sess.opts.debugging_opts.force_unstable_if_unmarked { + return + } + } + + let msg = match *reason { + Some(ref r) => format!("use of unstable library feature '{}': {}", + feature.as_str(), &r), + None => format!("use of unstable library feature '{}'", &feature) + }; + emit_feature_err(&self.sess.parse_sess, &feature.as_str(), span, + GateIssue::Library(Some(issue)), &msg); } Some(_) => { // Stable APIs are always ok to call and deprecated APIs are @@ -658,7 +693,7 @@ pub fn check_unused_or_stable_features<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>) { let access_levels = &tcx.privacy_access_levels(LOCAL_CRATE); - if tcx.stability.borrow().staged_api[&LOCAL_CRATE] && tcx.sess.features.borrow().staged_api { + if tcx.stability.borrow().staged_api[&LOCAL_CRATE] { let krate = tcx.hir.krate(); let mut missing = MissingStabilityAnnotations { tcx: tcx, diff --git a/src/librustc/session/config.rs b/src/librustc/session/config.rs index 75bc940625d82..884a71f0d32d4 100644 --- a/src/librustc/session/config.rs +++ b/src/librustc/session/config.rs @@ -1027,6 +1027,8 @@ options! {DebuggingOptions, DebuggingSetter, basic_debugging_options, "add a source pattern to the file path remapping config"), remap_path_prefix_to: Vec = (vec![], parse_string_push, [TRACKED], "add a mapping target to the file path remapping config"), + force_unstable_if_unmarked: bool = (false, parse_bool, [TRACKED], + "force all crates to be `rustc_private` unstable"), } pub fn default_lib_output() -> CrateType { diff --git a/src/librustc_driver/driver.rs b/src/librustc_driver/driver.rs index 5f14890665cab..8fddbe110b0e6 100644 --- a/src/librustc_driver/driver.rs +++ b/src/librustc_driver/driver.rs @@ -882,7 +882,7 @@ pub fn phase_3_run_analysis_passes<'tcx, F, R>(sess: &'tcx Session, "static item recursion checking", || static_recursion::check_crate(sess, &hir_map))?; - let index = stability::Index::new(&hir_map); + let index = stability::Index::new(&sess); let mut local_providers = ty::maps::Providers::default(); borrowck::provide(&mut local_providers); diff --git a/src/librustc_driver/test.rs b/src/librustc_driver/test.rs index 8b95be00fa752..3b4f2560fc555 100644 --- a/src/librustc_driver/test.rs +++ b/src/librustc_driver/test.rs @@ -138,7 +138,7 @@ fn test_env(source_string: &str, // run just enough stuff to build a tcx: let lang_items = lang_items::collect_language_items(&sess, &hir_map); let named_region_map = resolve_lifetime::krate(&sess, &hir_map); - let index = stability::Index::new(&hir_map); + let index = stability::Index::new(&sess); TyCtxt::create_and_enter(&sess, ty::maps::Providers::default(), ty::maps::Providers::default(), diff --git a/src/librustc_metadata/cstore.rs b/src/librustc_metadata/cstore.rs index 8d53e7d49ee81..c12b4209675de 100644 --- a/src/librustc_metadata/cstore.rs +++ b/src/librustc_metadata/cstore.rs @@ -269,15 +269,6 @@ impl CrateMetadata { self.root.disambiguator } - pub fn is_staged_api(&self, dep_graph: &DepGraph) -> bool { - for attr in self.get_item_attrs(CRATE_DEF_INDEX, dep_graph).iter() { - if attr.path == "stable" || attr.path == "unstable" { - return true; - } - } - false - } - pub fn is_allocator(&self, dep_graph: &DepGraph) -> bool { let attrs = self.get_item_attrs(CRATE_DEF_INDEX, dep_graph); attr::contains_name(&attrs, "allocator") diff --git a/src/librustc_metadata/cstore_impl.rs b/src/librustc_metadata/cstore_impl.rs index 6fa6a868605dc..c7da535faa294 100644 --- a/src/librustc_metadata/cstore_impl.rs +++ b/src/librustc_metadata/cstore_impl.rs @@ -267,11 +267,6 @@ impl CrateStore for cstore::CStore { self.get_crate_data(cnum).get_missing_lang_items(&self.dep_graph) } - fn is_staged_api(&self, cnum: CrateNum) -> bool - { - self.get_crate_data(cnum).is_staged_api(&self.dep_graph) - } - fn is_allocator(&self, cnum: CrateNum) -> bool { self.get_crate_data(cnum).is_allocator(&self.dep_graph) From 2729b716bbd8532c0bc7c791c3ef164d5ee959e0 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Wed, 10 May 2017 12:20:00 -0700 Subject: [PATCH 08/23] Don't use sanitize_sh with rust-installer There's no shell interpreting the file paths under the new Rusty rust-installer, so we don't need to use `sanitize_sh` for it. Plus, the drive-letter transformation is actually harmful for the now-native Windows rust-installer to understand those paths. --- src/bootstrap/dist.rs | 81 +++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 41 deletions(-) diff --git a/src/bootstrap/dist.rs b/src/bootstrap/dist.rs index 254b817b847a3..6557b8410b196 100644 --- a/src/bootstrap/dist.rs +++ b/src/bootstrap/dist.rs @@ -77,9 +77,9 @@ pub fn docs(build: &Build, stage: u32, host: &str) { .arg("--product-name=Rust-Documentation") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=Rust-documentation-is-installed.") - .arg(format!("--image-dir={}", sanitize_sh(&image))) - .arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build)))) - .arg(format!("--output-dir={}", sanitize_sh(&distdir(build)))) + .arg("--image-dir").arg(&image) + .arg("--work-dir").arg(&tmpdir(build)) + .arg("--output-dir").arg(&distdir(build)) .arg(format!("--package-name={}-{}", name, host)) .arg("--component-name=rust-docs") .arg("--legacy-manifest-dirs=rustlib,cargo") @@ -127,9 +127,9 @@ pub fn mingw(build: &Build, host: &str) { .arg("--product-name=Rust-MinGW") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=Rust-MinGW-is-installed.") - .arg(format!("--image-dir={}", sanitize_sh(&image))) - .arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build)))) - .arg(format!("--output-dir={}", sanitize_sh(&distdir(build)))) + .arg("--image-dir").arg(&image) + .arg("--work-dir").arg(&tmpdir(build)) + .arg("--output-dir").arg(&distdir(build)) .arg(format!("--package-name={}-{}", name, host)) .arg("--component-name=rust-mingw") .arg("--legacy-manifest-dirs=rustlib,cargo"); @@ -193,10 +193,10 @@ pub fn rustc(build: &Build, stage: u32, host: &str) { .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=Rust-is-ready-to-roll.") - .arg(format!("--image-dir={}", sanitize_sh(&image))) - .arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build)))) - .arg(format!("--output-dir={}", sanitize_sh(&distdir(build)))) - .arg(format!("--non-installed-overlay={}", sanitize_sh(&overlay))) + .arg("--image-dir").arg(&image) + .arg("--work-dir").arg(&tmpdir(build)) + .arg("--output-dir").arg(&distdir(build)) + .arg("--non-installed-overlay").arg(&overlay) .arg(format!("--package-name={}-{}", name, host)) .arg("--component-name=rustc") .arg("--legacy-manifest-dirs=rustlib,cargo"); @@ -303,9 +303,9 @@ pub fn std(build: &Build, compiler: &Compiler, target: &str) { .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=std-is-standing-at-the-ready.") - .arg(format!("--image-dir={}", sanitize_sh(&image))) - .arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build)))) - .arg(format!("--output-dir={}", sanitize_sh(&distdir(build)))) + .arg("--image-dir").arg(&image) + .arg("--work-dir").arg(&tmpdir(build)) + .arg("--output-dir").arg(&distdir(build)) .arg(format!("--package-name={}-{}", name, target)) .arg(format!("--component-name=rust-std-{}", target)) .arg("--legacy-manifest-dirs=rustlib,cargo"); @@ -359,9 +359,9 @@ pub fn analysis(build: &Build, compiler: &Compiler, target: &str) { .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=save-analysis-saved.") - .arg(format!("--image-dir={}", sanitize_sh(&image))) - .arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build)))) - .arg(format!("--output-dir={}", sanitize_sh(&distdir(build)))) + .arg("--image-dir").arg(&image) + .arg("--work-dir").arg(&tmpdir(build)) + .arg("--output-dir").arg(&distdir(build)) .arg(format!("--package-name={}-{}", name, target)) .arg(format!("--component-name=rust-analysis-{}", target)) .arg("--legacy-manifest-dirs=rustlib,cargo"); @@ -478,7 +478,7 @@ pub fn rust_src(build: &Build) { let mut cmd = rust_installer(build); cmd.arg("tarball") .arg("--input").arg(&plain_name) - .arg("--output").arg(sanitize_sh(&tarball)) + .arg("--output").arg(&tarball) .arg("--work-dir=.") .current_dir(tmpdir(build)); build.run(&mut cmd); @@ -528,9 +528,9 @@ pub fn rust_src(build: &Build) { .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=Awesome-Source.") - .arg(format!("--image-dir={}", sanitize_sh(&image))) - .arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build)))) - .arg(format!("--output-dir={}", sanitize_sh(&distdir(build)))) + .arg("--image-dir").arg(&image) + .arg("--work-dir").arg(&tmpdir(build)) + .arg("--output-dir").arg(&distdir(build)) .arg(format!("--package-name={}", name)) .arg("--component-name=rust-src") .arg("--legacy-manifest-dirs=rustlib,cargo"); @@ -629,10 +629,10 @@ pub fn cargo(build: &Build, stage: u32, target: &str) { .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=Rust-is-ready-to-roll.") - .arg(format!("--image-dir={}", sanitize_sh(&image))) - .arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build)))) - .arg(format!("--output-dir={}", sanitize_sh(&distdir(build)))) - .arg(format!("--non-installed-overlay={}", sanitize_sh(&overlay))) + .arg("--image-dir").arg(&image) + .arg("--work-dir").arg(&tmpdir(build)) + .arg("--output-dir").arg(&distdir(build)) + .arg("--non-installed-overlay").arg(&overlay) .arg(format!("--package-name={}-{}", name, target)) .arg("--component-name=cargo") .arg("--legacy-manifest-dirs=rustlib,cargo"); @@ -678,10 +678,10 @@ pub fn rls(build: &Build, stage: u32, target: &str) { .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=RLS-ready-to-serve.") - .arg(format!("--image-dir={}", sanitize_sh(&image))) - .arg(format!("--work-dir={}", sanitize_sh(&tmpdir(build)))) - .arg(format!("--output-dir={}", sanitize_sh(&distdir(build)))) - .arg(format!("--non-installed-overlay={}", sanitize_sh(&overlay))) + .arg("--image-dir").arg(&image) + .arg("--work-dir").arg(&tmpdir(build)) + .arg("--output-dir").arg(&distdir(build)) + .arg("--non-installed-overlay").arg(&overlay) .arg(format!("--package-name={}-{}", name, target)) .arg("--component-name=rls") .arg("--legacy-manifest-dirs=rustlib,cargo"); @@ -732,16 +732,15 @@ pub fn extended(build: &Build, stage: u32, target: &str) { // upgrades rustc was upgraded before rust-std. To avoid rustc clobbering // the std files during uninstall. To do this ensure that rustc comes // before rust-std in the list below. - let mut input_tarballs = format!("{},{},{},{},{},{}", - sanitize_sh(&rustc_installer), - sanitize_sh(&cargo_installer), - sanitize_sh(&rls_installer), - sanitize_sh(&analysis_installer), - sanitize_sh(&docs_installer), - sanitize_sh(&std_installer)); + let mut tarballs = vec![rustc_installer, cargo_installer, rls_installer, + analysis_installer, docs_installer, std_installer]; if target.contains("pc-windows-gnu") { - input_tarballs.push_str(","); - input_tarballs.push_str(&sanitize_sh(&mingw_installer)); + tarballs.push(mingw_installer); + } + let mut input_tarballs = tarballs[0].as_os_str().to_owned(); + for tarball in &tarballs[1..] { + input_tarballs.push(","); + input_tarballs.push(tarball); } let mut cmd = rust_installer(build); @@ -749,12 +748,12 @@ pub fn extended(build: &Build, stage: u32, target: &str) { .arg("--product-name=Rust") .arg("--rel-manifest-dir=rustlib") .arg("--success-message=Rust-is-ready-to-roll.") - .arg(format!("--work-dir={}", sanitize_sh(&work))) - .arg(format!("--output-dir={}", sanitize_sh(&distdir(build)))) + .arg("--work-dir").arg(&work) + .arg("--output-dir").arg(&distdir(build)) .arg(format!("--package-name={}-{}", pkgname(build, "rust"), target)) .arg("--legacy-manifest-dirs=rustlib,cargo") - .arg(format!("--input-tarballs={}", input_tarballs)) - .arg(format!("--non-installed-overlay={}", sanitize_sh(&overlay))); + .arg("--input-tarballs").arg(input_tarballs) + .arg("--non-installed-overlay").arg(&overlay); build.run(&mut cmd); let mut license = String::new(); From e42875ce6dfc0102b00e6725f403c2f5a1b59fce Mon Sep 17 00:00:00 2001 From: Tshepang Lekhonkhobe Date: Thu, 11 May 2017 06:27:01 +0200 Subject: [PATCH 09/23] doc: break into 2 sentences --- src/libstd/thread/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libstd/thread/mod.rs b/src/libstd/thread/mod.rs index 4432f898e04f8..4ddd92f159227 100644 --- a/src/libstd/thread/mod.rs +++ b/src/libstd/thread/mod.rs @@ -245,8 +245,8 @@ impl Builder { /// configuration methods can be chained. /// /// If the [`stack_size`] field is not specified, the stack size - /// will be the `RUST_MIN_STACK` environment variable, if it is - /// not specified either, a sensible default size will be set (2MB as + /// will be the `RUST_MIN_STACK` environment variable. If it is + /// not specified either, a sensible default will be set (2MB as /// of the writting of this doc). /// /// # Examples From 67a0d27c6529de335304b10c6ae6b0eed77bfc79 Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Thu, 11 May 2017 17:45:27 +1200 Subject: [PATCH 10/23] Ensure we walk the root module of the crate --- src/librustc_save_analysis/data.rs | 2 +- src/librustc_save_analysis/dump_visitor.rs | 27 +++++++++++++++++++ src/librustc_save_analysis/external_data.rs | 4 +-- src/librustc_save_analysis/json_api_dumper.rs | 2 +- src/librustc_save_analysis/json_dumper.rs | 2 +- src/librustc_save_analysis/lib.rs | 2 +- 6 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/librustc_save_analysis/data.rs b/src/librustc_save_analysis/data.rs index d4ded71a33390..cac1a2e3c5af1 100644 --- a/src/librustc_save_analysis/data.rs +++ b/src/librustc_save_analysis/data.rs @@ -267,7 +267,7 @@ pub struct ModData { pub items: Vec, pub visibility: Visibility, pub docs: String, - pub sig: Signature, + pub sig: Option, pub attributes: Vec, } diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs index 763414c1a555f..dd022dee78cba 100644 --- a/src/librustc_save_analysis/dump_visitor.rs +++ b/src/librustc_save_analysis/dump_visitor.rs @@ -1211,6 +1211,33 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> { } impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll, D> { + fn visit_mod(&mut self, m: &'l ast::Mod, span: Span, id: NodeId) { + // Since we handle explicit modules ourselves in visit_item, this should + // only get called for the root module of a crate. + assert_eq!(id, ast::CRATE_NODE_ID); + + let qualname = format!("::{}", self.tcx.node_path_str(id)); + + let cm = self.tcx.sess.codemap(); + let filename = cm.span_to_filename(span); + self.dumper.mod_data(ModData { + id: id, + name: String::new(), + qualname: qualname, + span: span, + scope: id, + filename: filename, + items: m.items.iter().map(|i| i.id).collect(), + visibility: Visibility::Public, + // TODO Visitor doesn't pass us the attibutes. + docs: String::new(), + sig: None, + // TODO Visitor doesn't pass us the attibutes. + attributes: vec![], + }.lower(self.tcx)); + self.nest_scope(id, |v| visit::walk_mod(v, m)); + } + fn visit_item(&mut self, item: &'l ast::Item) { use syntax::ast::ItemKind::*; self.process_macro_use(item.span, item.id); diff --git a/src/librustc_save_analysis/external_data.rs b/src/librustc_save_analysis/external_data.rs index 6fd2de97767e1..02441a0587eb6 100644 --- a/src/librustc_save_analysis/external_data.rs +++ b/src/librustc_save_analysis/external_data.rs @@ -392,7 +392,7 @@ pub struct ModData { pub items: Vec, pub visibility: Visibility, pub docs: String, - pub sig: Signature, + pub sig: Option, pub attributes: Vec, } @@ -410,7 +410,7 @@ impl Lower for data::ModData { items: self.items.into_iter().map(|id| make_def_id(id, &tcx.hir)).collect(), visibility: self.visibility, docs: self.docs, - sig: self.sig.lower(tcx), + sig: self.sig.map(|s| s.lower(tcx)), attributes: self.attributes.lower(tcx), } } diff --git a/src/librustc_save_analysis/json_api_dumper.rs b/src/librustc_save_analysis/json_api_dumper.rs index 41221ad986379..49b14f5eca072 100644 --- a/src/librustc_save_analysis/json_api_dumper.rs +++ b/src/librustc_save_analysis/json_api_dumper.rs @@ -293,7 +293,7 @@ impl Into> for ModData { parent: None, decl_id: None, docs: self.docs, - sig: Some(self.sig.into()), + sig: self.sig.map(|s| s.into()), attributes: vec![], }), _ => None, diff --git a/src/librustc_save_analysis/json_dumper.rs b/src/librustc_save_analysis/json_dumper.rs index 2d1e12bf0a10d..eaa0c0825f0e9 100644 --- a/src/librustc_save_analysis/json_dumper.rs +++ b/src/librustc_save_analysis/json_dumper.rs @@ -121,7 +121,7 @@ impl<'b, O: DumpOutput + 'b> Dump for JsonDumper { children: data.items.into_iter().map(|id| id_from_def_id(id)).collect(), decl_id: None, docs: data.docs, - sig: Some(data.sig.into()), + sig: data.sig.map(|s| s.into()), attributes: data.attributes.into_iter().map(|a| a.into()).collect(), }; if def.span.file_name.to_str().unwrap() != def.value { diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index fd6898d19d84f..9283c6d7b5380 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -257,7 +257,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> { items: m.items.iter().map(|i| i.id).collect(), visibility: From::from(&item.vis), docs: docs_for_attrs(&item.attrs), - sig: self.sig_base(item), + sig: Some(self.sig_base(item)), attributes: item.attrs.clone(), })) } From 43349e649d9fecac9f6a8e14f31ca660eae2748d Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Thu, 11 May 2017 16:57:45 +0200 Subject: [PATCH 11/23] Upgrade some comments to doc comments --- src/librustc/ty/sty.rs | 47 +++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/src/librustc/ty/sty.rs b/src/librustc/ty/sty.rs index 630e4a239cc65..89960b0e4f678 100644 --- a/src/librustc/ty/sty.rs +++ b/src/librustc/ty/sty.rs @@ -67,8 +67,8 @@ pub enum BoundRegion { /// Fresh bound identifiers created during GLB computations. BrFresh(u32), - // Anonymous region for the implicit env pointer parameter - // to a closure + /// Anonymous region for the implicit env pointer parameter + /// to a closure BrEnv, } @@ -95,8 +95,8 @@ pub struct Issue32330 { pub region_name: ast::Name, } -// NB: If you change this, you'll probably want to change the corresponding -// AST structure in libsyntax/ast.rs as well. +/// NB: If you change this, you'll probably want to change the corresponding +/// AST structure in libsyntax/ast.rs as well. #[derive(Clone, PartialEq, Eq, Hash, Debug, RustcEncodable, RustcDecodable)] pub enum TypeVariants<'tcx> { /// The primitive boolean type. Written as `bool`. @@ -283,11 +283,11 @@ impl<'a, 'gcx, 'acx, 'tcx> ClosureSubsts<'tcx> { #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, RustcEncodable, RustcDecodable)] pub enum ExistentialPredicate<'tcx> { - // e.g. Iterator + /// e.g. Iterator Trait(ExistentialTraitRef<'tcx>), - // e.g. Iterator::Item = T + /// e.g. Iterator::Item = T Projection(ExistentialProjection<'tcx>), - // e.g. Send + /// e.g. Send AutoTrait(DefId), } @@ -683,8 +683,8 @@ impl<'a, 'gcx, 'tcx> ParamTy { /// [dbi]: http://en.wikipedia.org/wiki/De_Bruijn_index #[derive(Clone, PartialEq, Eq, Hash, RustcEncodable, RustcDecodable, Debug, Copy)] pub struct DebruijnIndex { - // We maintain the invariant that this is never 0. So 1 indicates - // the innermost binder. To ensure this, create with `DebruijnIndex::new`. + /// We maintain the invariant that this is never 0. So 1 indicates + /// the innermost binder. To ensure this, create with `DebruijnIndex::new`. pub depth: u32, } @@ -908,7 +908,7 @@ impl DebruijnIndex { } } -// Region utilities +/// Region utilities impl<'tcx> RegionKind<'tcx> { pub fn is_bound(&self) -> bool { match *self { @@ -972,7 +972,7 @@ impl<'tcx> RegionKind<'tcx> { } } -// Type utilities +/// Type utilities impl<'a, 'gcx, 'tcx> TyS<'tcx> { pub fn as_opt_param_ty(&self) -> Option { match self.sty { @@ -995,8 +995,8 @@ impl<'a, 'gcx, 'tcx> TyS<'tcx> { } } - // Test whether this is a `()` which was produced by defaulting a - // diverging type variable with feature(never_type) disabled. + /// Test whether this is a `()` which was produced by defaulting a + /// diverging type variable with feature(never_type) disabled. pub fn is_defaulted_unit(&self) -> bool { match self.sty { TyTuple(_, true) => true, @@ -1171,6 +1171,7 @@ impl<'a, 'gcx, 'tcx> TyS<'tcx> { } } + /// panics if called on any type other than `Box` pub fn boxed_ty(&self) -> Ty<'tcx> { match self.sty { TyAdt(def, substs) if def.is_box() => substs.type_at(0), @@ -1178,11 +1179,9 @@ impl<'a, 'gcx, 'tcx> TyS<'tcx> { } } - /* - A scalar type is one that denotes an atomic datum, with no sub-components. - (A TyRawPtr is scalar because it represents a non-managed pointer, so its - contents are abstract to rustc.) - */ + /// A scalar type is one that denotes an atomic datum, with no sub-components. + /// (A TyRawPtr is scalar because it represents a non-managed pointer, so its + /// contents are abstract to rustc.) pub fn is_scalar(&self) -> bool { match self.sty { TyBool | TyChar | TyInt(_) | TyFloat(_) | TyUint(_) | @@ -1278,10 +1277,10 @@ impl<'a, 'gcx, 'tcx> TyS<'tcx> { } } - // Returns the type and mutability of *ty. - // - // The parameter `explicit` indicates if this is an *explicit* dereference. - // Some types---notably unsafe ptrs---can only be dereferenced explicitly. + /// Returns the type and mutability of *ty. + /// + /// The parameter `explicit` indicates if this is an *explicit* dereference. + /// Some types---notably unsafe ptrs---can only be dereferenced explicitly. pub fn builtin_deref(&self, explicit: bool, pref: ty::LvaluePreference) -> Option> { @@ -1302,7 +1301,7 @@ impl<'a, 'gcx, 'tcx> TyS<'tcx> { } } - // Returns the type of ty[i] + /// Returns the type of ty[i] pub fn builtin_index(&self) -> Option> { match self.sty { TyArray(ty, _) | TySlice(ty) => Some(ty), @@ -1317,7 +1316,7 @@ impl<'a, 'gcx, 'tcx> TyS<'tcx> { } } - // Type accessors for substructures of types + /// Type accessors for substructures of types pub fn fn_args(&self) -> ty::Binder<&'tcx [Ty<'tcx>]> { self.fn_sig().inputs() } From 641d05353a596311eff9442a3fc50f332baaf857 Mon Sep 17 00:00:00 2001 From: Martin Glagla Date: Thu, 11 May 2017 20:38:15 +0200 Subject: [PATCH 12/23] Fix typo in size_hint example comment --- src/libcore/iter/iterator.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libcore/iter/iterator.rs b/src/libcore/iter/iterator.rs index b3f4d75c4da61..67b97afb9769a 100644 --- a/src/libcore/iter/iterator.rs +++ b/src/libcore/iter/iterator.rs @@ -119,7 +119,7 @@ pub trait Iterator { /// // exactly wouldn't be possible without executing filter(). /// assert_eq!((0, Some(10)), iter.size_hint()); /// - /// // Let's add one five more numbers with chain() + /// // Let's add five more numbers with chain() /// let iter = (0..10).filter(|x| x % 2 == 0).chain(15..20); /// /// // now both bounds are increased by five From eb5fc3c0131cc9486011bca30e1899fe2ebb6d3a Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Thu, 11 May 2017 11:42:09 -0700 Subject: [PATCH 13/23] Update to lzma-sys-0.1.2 to fix Windows crt-static --- src/Cargo.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Cargo.lock b/src/Cargo.lock index 0b6597ce4e836..99e384a8a0f66 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -345,7 +345,7 @@ source = "registry+/~https://github.com/rust-lang/crates.io-index" [[package]] name = "lzma-sys" -version = "0.1.1" +version = "0.1.2" source = "registry+/~https://github.com/rust-lang/crates.io-index" dependencies = [ "filetime 0.1.10 (registry+/~https://github.com/rust-lang/crates.io-index)", @@ -1126,7 +1126,7 @@ name = "xz2" version = "0.1.3" source = "registry+/~https://github.com/rust-lang/crates.io-index" dependencies = [ - "lzma-sys 0.1.1 (registry+/~https://github.com/rust-lang/crates.io-index)", + "lzma-sys 0.1.2 (registry+/~https://github.com/rust-lang/crates.io-index)", ] [[package]] @@ -1160,7 +1160,7 @@ source = "registry+/~https://github.com/rust-lang/crates.io-index" "checksum lazy_static 0.2.8 (registry+/~https://github.com/rust-lang/crates.io-index)" = "3b37545ab726dd833ec6420aaba8231c5b320814b9029ad585555d2a03e94fbf" "checksum libc 0.2.21 (registry+/~https://github.com/rust-lang/crates.io-index)" = "88ee81885f9f04bff991e306fea7c1c60a5f0f9e409e99f6b40e3311a3363135" "checksum log 0.3.7 (registry+/~https://github.com/rust-lang/crates.io-index)" = "5141eca02775a762cc6cd564d8d2c50f67c0ea3a372cbf1c51592b3e029e10ad" -"checksum lzma-sys 0.1.1 (registry+/~https://github.com/rust-lang/crates.io-index)" = "506a25e3491881f47407458f95429d153437d3a5bc4685c747de69e1ec7e897d" +"checksum lzma-sys 0.1.2 (registry+/~https://github.com/rust-lang/crates.io-index)" = "62f701b225af0ecead9b083529d92b7c19f91a2819df76a96ed80ac705349918" "checksum mdbook 0.0.21 (registry+/~https://github.com/rust-lang/crates.io-index)" = "f1e2e9d848514dcfad4195788d0d42ae5153a477c191d75d5b84fab10f222fbd" "checksum memchr 1.0.1 (registry+/~https://github.com/rust-lang/crates.io-index)" = "1dbccc0e46f1ea47b9f17e6d67c5a96bd27030519c519c9c91327e31275a47b4" "checksum miniz-sys 0.1.9 (registry+/~https://github.com/rust-lang/crates.io-index)" = "28eaee17666671fa872e567547e8428e83308ebe5808cdf6a0e28397dbe2c726" From fb7ba4772cdad24083fa73552425d4f91fd8be33 Mon Sep 17 00:00:00 2001 From: Nick Cameron Date: Fri, 12 May 2017 07:15:29 +1200 Subject: [PATCH 14/23] Pass crate attributes in visit.rs --- src/librustc/lint/context.rs | 2 +- src/librustc_passes/hir_stats.rs | 2 +- src/librustc_save_analysis/dump_visitor.rs | 8 +++----- src/libsyntax/util/node_count.rs | 2 +- src/libsyntax/visit.rs | 8 +++++--- src/libsyntax_ext/proc_macro_registrar.rs | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/librustc/lint/context.rs b/src/librustc/lint/context.rs index 6f3e84247f797..60e671f1772e3 100644 --- a/src/librustc/lint/context.rs +++ b/src/librustc/lint/context.rs @@ -1055,7 +1055,7 @@ impl<'a> ast_visit::Visitor<'a> for EarlyContext<'a> { run_lints!(self, check_ident, early_passes, sp, id); } - fn visit_mod(&mut self, m: &'a ast::Mod, s: Span, n: ast::NodeId) { + fn visit_mod(&mut self, m: &'a ast::Mod, s: Span, _a: &[ast::Attribute], n: ast::NodeId) { run_lints!(self, check_mod, early_passes, m, s, n); ast_visit::walk_mod(self, m); run_lints!(self, check_mod_post, early_passes, m, s, n); diff --git a/src/librustc_passes/hir_stats.rs b/src/librustc_passes/hir_stats.rs index 749146fe49672..29fac5463e557 100644 --- a/src/librustc_passes/hir_stats.rs +++ b/src/librustc_passes/hir_stats.rs @@ -252,7 +252,7 @@ impl<'v> hir_visit::Visitor<'v> for StatCollector<'v> { impl<'v> ast_visit::Visitor<'v> for StatCollector<'v> { - fn visit_mod(&mut self, m: &'v ast::Mod, _s: Span, _n: NodeId) { + fn visit_mod(&mut self, m: &'v ast::Mod, _s: Span, _a: &[ast::Attribute], _n: NodeId) { self.record("Mod", Id::None, m); ast_visit::walk_mod(self, m) } diff --git a/src/librustc_save_analysis/dump_visitor.rs b/src/librustc_save_analysis/dump_visitor.rs index dd022dee78cba..a95236e2a5072 100644 --- a/src/librustc_save_analysis/dump_visitor.rs +++ b/src/librustc_save_analysis/dump_visitor.rs @@ -1211,7 +1211,7 @@ impl<'l, 'tcx: 'l, 'll, D: Dump + 'll> DumpVisitor<'l, 'tcx, 'll, D> { } impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll, D> { - fn visit_mod(&mut self, m: &'l ast::Mod, span: Span, id: NodeId) { + fn visit_mod(&mut self, m: &'l ast::Mod, span: Span, attrs: &[ast::Attribute], id: NodeId) { // Since we handle explicit modules ourselves in visit_item, this should // only get called for the root module of a crate. assert_eq!(id, ast::CRATE_NODE_ID); @@ -1229,11 +1229,9 @@ impl<'l, 'tcx: 'l, 'll, D: Dump +'ll> Visitor<'l> for DumpVisitor<'l, 'tcx, 'll, filename: filename, items: m.items.iter().map(|i| i.id).collect(), visibility: Visibility::Public, - // TODO Visitor doesn't pass us the attibutes. - docs: String::new(), + docs: docs_for_attrs(attrs), sig: None, - // TODO Visitor doesn't pass us the attibutes. - attributes: vec![], + attributes: attrs.to_owned(), }.lower(self.tcx)); self.nest_scope(id, |v| visit::walk_mod(v, m)); } diff --git a/src/libsyntax/util/node_count.rs b/src/libsyntax/util/node_count.rs index 9d9957a0f4534..0a5d0c2e7fe01 100644 --- a/src/libsyntax/util/node_count.rs +++ b/src/libsyntax/util/node_count.rs @@ -31,7 +31,7 @@ impl<'ast> Visitor<'ast> for NodeCounter { self.count += 1; walk_ident(self, span, ident); } - fn visit_mod(&mut self, m: &Mod, _s: Span, _n: NodeId) { + fn visit_mod(&mut self, m: &Mod, _s: Span, _a: &[Attribute], _n: NodeId) { self.count += 1; walk_mod(self, m) } diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 2e42c6986e64e..9288d95009c1d 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -56,7 +56,9 @@ pub trait Visitor<'ast>: Sized { fn visit_ident(&mut self, span: Span, ident: Ident) { walk_ident(self, span, ident); } - fn visit_mod(&mut self, m: &'ast Mod, _s: Span, _n: NodeId) { walk_mod(self, m) } + fn visit_mod(&mut self, m: &'ast Mod, _s: Span, _attrs: &[Attribute], _n: NodeId) { + walk_mod(self, m); + } fn visit_foreign_item(&mut self, i: &'ast ForeignItem) { walk_foreign_item(self, i) } fn visit_global_asm(&mut self, ga: &'ast GlobalAsm) { walk_global_asm(self, ga) } fn visit_item(&mut self, i: &'ast Item) { walk_item(self, i) } @@ -172,7 +174,7 @@ pub fn walk_ident<'a, V: Visitor<'a>>(visitor: &mut V, span: Span, ident: Ident) } pub fn walk_crate<'a, V: Visitor<'a>>(visitor: &mut V, krate: &'a Crate) { - visitor.visit_mod(&krate.module, krate.span, CRATE_NODE_ID); + visitor.visit_mod(&krate.module, krate.span, &krate.attrs, CRATE_NODE_ID); walk_list!(visitor, visit_attribute, &krate.attrs); } @@ -249,7 +251,7 @@ pub fn walk_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a Item) { item.id) } ItemKind::Mod(ref module) => { - visitor.visit_mod(module, item.span, item.id) + visitor.visit_mod(module, item.span, &item.attrs, item.id) } ItemKind::ForeignMod(ref foreign_module) => { walk_list!(visitor, visit_foreign_item, &foreign_module.items); diff --git a/src/libsyntax_ext/proc_macro_registrar.rs b/src/libsyntax_ext/proc_macro_registrar.rs index bb89caab709b0..6318abec69f06 100644 --- a/src/libsyntax_ext/proc_macro_registrar.rs +++ b/src/libsyntax_ext/proc_macro_registrar.rs @@ -329,7 +329,7 @@ impl<'a> Visitor<'a> for CollectProcMacros<'a> { visit::walk_item(self, item); } - fn visit_mod(&mut self, m: &'a ast::Mod, _s: Span, id: NodeId) { + fn visit_mod(&mut self, m: &'a ast::Mod, _s: Span, _a: &[ast::Attribute], id: NodeId) { let mut prev_in_root = self.in_root; if id != ast::CRATE_NODE_ID { prev_in_root = mem::replace(&mut self.in_root, false); From 084b67f56a66b440657e6aa66227e971790a87a4 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 11 May 2017 19:19:21 +0000 Subject: [PATCH 15/23] Annotate the license exceptions --- src/tools/tidy/src/deps.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/tools/tidy/src/deps.rs b/src/tools/tidy/src/deps.rs index 3bf396db4d39d..8b7da2267cded 100644 --- a/src/tools/tidy/src/deps.rs +++ b/src/tools/tidy/src/deps.rs @@ -23,12 +23,15 @@ static LICENSES: &'static [&'static str] = &[ "Unlicense/MIT", ]; -/// These MPL licensed projects are acceptable, but only these. +// These are exceptions to Rust's permissive licensing policy, and +// should be considered bugs. Exceptions are only allowed in Rust +// tooling. It is _crucial_ that no exception crates be dependencies +// of the Rust runtime (std / test). static EXCEPTIONS: &'static [&'static str] = &[ - "mdbook", - "openssl", - "pest", - "thread-id", + "mdbook", // MPL2, mdbook + "openssl", // BSD+advertising clause, cargo, mdbook + "pest", // MPL2, mdbook via handlebars + "thread-id", // Apache-2.0, mdbook ]; pub fn check(path: &Path, bad: &mut bool) { From 75b69c453b0fcde2ab9008f0968e0d38c75666b8 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Thu, 11 May 2017 22:28:13 +0200 Subject: [PATCH 16/23] Fix search when looking to sources --- src/librustdoc/html/static/rustdoc.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/librustdoc/html/static/rustdoc.css b/src/librustdoc/html/static/rustdoc.css index ddaa00aa4fb14..fc879dc0705f6 100644 --- a/src/librustdoc/html/static/rustdoc.css +++ b/src/librustdoc/html/static/rustdoc.css @@ -236,6 +236,9 @@ nav.sub { overflow: auto; padding-left: 0; } +#search { + margin-left: 230px; +} .content pre.line-numbers { float: left; border: none; From 68c1ce91701a322601dec0e0c8845e535909f9b2 Mon Sep 17 00:00:00 2001 From: Eduard-Mihai Burtescu Date: Fri, 12 May 2017 00:14:31 +0300 Subject: [PATCH 17/23] rustc_trans: do not attempt to truncate an i1 const to i1. --- src/librustc_trans/mir/constant.rs | 7 +++++-- src/test/run-pass/issue-41744.rs | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 src/test/run-pass/issue-41744.rs diff --git a/src/librustc_trans/mir/constant.rs b/src/librustc_trans/mir/constant.rs index 040194e63d07e..1305d6fff8cb0 100644 --- a/src/librustc_trans/mir/constant.rs +++ b/src/librustc_trans/mir/constant.rs @@ -415,8 +415,11 @@ impl<'a, 'tcx> MirConstContext<'a, 'tcx> { Value(base)); } if projected_ty.is_bool() { - unsafe { - val = llvm::LLVMConstTrunc(val, Type::i1(self.ccx).to_ref()); + let i1_type = Type::i1(self.ccx); + if val_ty(val) != i1_type { + unsafe { + val = llvm::LLVMConstTrunc(val, i1_type.to_ref()); + } } } (Base::Value(val), extra) diff --git a/src/test/run-pass/issue-41744.rs b/src/test/run-pass/issue-41744.rs new file mode 100644 index 0000000000000..276067d7d7491 --- /dev/null +++ b/src/test/run-pass/issue-41744.rs @@ -0,0 +1,16 @@ +// Copyright 2017 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +trait Tc {} +impl Tc for bool {} + +fn main() { + let _: &[&Tc] = &[&true]; +} From af0e16c852662d23097ce1821ff04c1676aed20f Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 8 May 2017 14:36:33 -0700 Subject: [PATCH 18/23] rustbuild: Use `-Z force-unstable-if-unmarked` --- src/bootstrap/bin/rustc.rs | 13 +++++++++++++ src/bootstrap/lib.rs | 7 +++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/bootstrap/bin/rustc.rs b/src/bootstrap/bin/rustc.rs index 62b7f6cb72e3b..906c468241ae9 100644 --- a/src/bootstrap/bin/rustc.rs +++ b/src/bootstrap/bin/rustc.rs @@ -194,6 +194,8 @@ fn main() { // do that we pass a weird flag to the compiler to get it to do // so. Note that this is definitely a hack, and we should likely // flesh out rpath support more fully in the future. + // + // FIXME: remove condition after next stage0 if stage != "0" { cmd.arg("-Z").arg("osx-rpath-install-name"); } @@ -218,6 +220,17 @@ fn main() { cmd.arg("-Z").arg("unstable-options"); cmd.arg("-C").arg("target-feature=+crt-static"); } + + // Force all crates compiled by this compiler to (a) be unstable and (b) + // allow the `rustc_private` feature to link to other unstable crates + // also in the sysroot. + // + // FIXME: remove condition after next stage0 + if env::var_os("RUSTC_FORCE_UNSTABLE").is_some() { + if stage != "0" { + cmd.arg("-Z").arg("force-unstable-if-unmarked"); + } + } } if verbose > 1 { diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs index 017d4015134d0..ea0b521a2ce69 100644 --- a/src/bootstrap/lib.rs +++ b/src/bootstrap/lib.rs @@ -479,7 +479,8 @@ impl Build { // compiled with debuginfo. if mode != Mode::Tool { cargo.env("RUSTC_DEBUGINFO", self.config.rust_debuginfo.to_string()) - .env("RUSTC_DEBUGINFO_LINES", self.config.rust_debuginfo_lines.to_string()); + .env("RUSTC_DEBUGINFO_LINES", self.config.rust_debuginfo_lines.to_string()) + .env("RUSTC_FORCE_UNSTABLE", "1"); } // Enable usage of unstable features @@ -524,7 +525,9 @@ impl Build { // the comipiler, libs, and tests are stable and we don't want to make // their deps unstable (since this would break the first invariant // above). - if mode != Mode::Tool { + // + // FIXME: remove this after next stage0 + if mode != Mode::Tool && stage == 0 { cargo.env("RUSTBUILD_UNSTABLE", "1"); } From ab54f4b226639558ff46ea1f3e3f504aacef562d Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Mon, 8 May 2017 14:36:44 -0700 Subject: [PATCH 19/23] rustc: Remove #![unstable] annotation These are now no longer necessary with `-Z force-unstable-if-unmarked` --- src/libarena/lib.rs | 4 ++-- src/libflate/lib.rs | 4 ++-- src/libfmt_macros/lib.rs | 4 ++-- src/libgetopts/lib.rs | 6 +++--- src/libgraphviz/lib.rs | 4 ++-- src/libproc_macro_plugin/lib.rs | 6 +++--- src/librustc/lib.rs | 7 ++++--- src/librustc_back/lib.rs | 7 ++++--- src/librustc_bitflags/lib.rs | 4 ++-- src/librustc_borrowck/lib.rs | 8 +++++--- src/librustc_const_eval/lib.rs | 7 ++++--- src/librustc_const_math/lib.rs | 7 ++++--- src/librustc_data_structures/lib.rs | 7 ++++--- src/librustc_driver/lib.rs | 7 ++++--- src/librustc_errors/lib.rs | 7 ++++--- src/librustc_incremental/lib.rs | 7 ++++--- src/librustc_lint/lib.rs | 7 ++++--- src/librustc_llvm/lib.rs | 7 ++++--- src/librustc_metadata/lib.rs | 7 ++++--- src/librustc_mir/lib.rs | 7 ++++--- src/librustc_passes/lib.rs | 7 ++++--- src/librustc_platform_intrinsics/lib.rs | 4 ++-- src/librustc_plugin/lib.rs | 7 ++++--- src/librustc_privacy/lib.rs | 7 ++++--- src/librustc_resolve/lib.rs | 7 ++++--- src/librustc_save_analysis/lib.rs | 7 ++++--- src/librustc_trans/lib.rs | 7 ++++--- src/librustc_typeck/lib.rs | 7 ++++--- src/librustdoc/lib.rs | 7 ++++--- src/libserialize/lib.rs | 6 +++--- src/libsyntax/lib.rs | 7 ++++--- src/libsyntax_ext/lib.rs | 7 ++++--- src/libsyntax_pos/lib.rs | 7 ++++--- src/libterm/lib.rs | 7 +++---- 34 files changed, 121 insertions(+), 97 deletions(-) diff --git a/src/libarena/lib.rs b/src/libarena/lib.rs index 321fa2edd56c7..c4c1635aa2a5a 100644 --- a/src/libarena/lib.rs +++ b/src/libarena/lib.rs @@ -19,7 +19,7 @@ //! objects of a single type. #![crate_name = "arena"] -#![unstable(feature = "rustc_private", issue = "27812")] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] #![crate_type = "rlib"] #![crate_type = "dylib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -32,7 +32,7 @@ #![feature(core_intrinsics)] #![feature(dropck_eyepatch)] #![feature(generic_param_attrs)] -#![feature(staged_api)] +#![cfg_attr(stage0, feature(staged_api))] #![cfg_attr(test, feature(test))] #![allow(deprecated)] diff --git a/src/libflate/lib.rs b/src/libflate/lib.rs index 3619be82829ca..e0bea884f31c5 100644 --- a/src/libflate/lib.rs +++ b/src/libflate/lib.rs @@ -15,7 +15,7 @@ //! [mz]: https://code.google.com/p/miniz/ #![crate_name = "flate"] -#![unstable(feature = "rustc_private", issue = "27812")] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] #![crate_type = "rlib"] #![crate_type = "dylib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -25,7 +25,7 @@ #![deny(warnings)] #![feature(libc)] -#![feature(staged_api)] +#![cfg_attr(stage0, feature(staged_api))] #![feature(unique)] #![cfg_attr(test, feature(rand))] diff --git a/src/libfmt_macros/lib.rs b/src/libfmt_macros/lib.rs index f5a687de64e48..641a42b08188f 100644 --- a/src/libfmt_macros/lib.rs +++ b/src/libfmt_macros/lib.rs @@ -15,7 +15,7 @@ //! generated instead. #![crate_name = "fmt_macros"] -#![unstable(feature = "rustc_private", issue = "27812")] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] #![crate_type = "rlib"] #![crate_type = "dylib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -25,7 +25,7 @@ test(attr(deny(warnings))))] #![deny(warnings)] -#![feature(staged_api)] +#![cfg_attr(stage0, feature(staged_api))] #![feature(unicode)] pub use self::Piece::*; diff --git a/src/libgetopts/lib.rs b/src/libgetopts/lib.rs index a5cd9fab2cf4b..c69c68ba59c01 100644 --- a/src/libgetopts/lib.rs +++ b/src/libgetopts/lib.rs @@ -78,9 +78,9 @@ //! ``` #![crate_name = "getopts"] -#![unstable(feature = "rustc_private", +#![cfg_attr(stage0, unstable(feature = "rustc_private", reason = "use the crates.io `getopts` library instead", - issue = "27812")] + issue = "27812"))] #![crate_type = "rlib"] #![crate_type = "dylib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -91,7 +91,7 @@ #![deny(missing_docs)] #![deny(warnings)] -#![feature(staged_api)] +#![cfg_attr(stage0, feature(staged_api))] use self::Name::*; use self::HasArg::*; diff --git a/src/libgraphviz/lib.rs b/src/libgraphviz/lib.rs index 1b2c7775185f7..2c6744e7c9053 100644 --- a/src/libgraphviz/lib.rs +++ b/src/libgraphviz/lib.rs @@ -284,8 +284,8 @@ //! * [DOT language](http://www.graphviz.org/doc/info/lang.html) #![crate_name = "graphviz"] -#![unstable(feature = "rustc_private", issue = "27812")] -#![feature(staged_api)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(staged_api))] #![crate_type = "rlib"] #![crate_type = "dylib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", diff --git a/src/libproc_macro_plugin/lib.rs b/src/libproc_macro_plugin/lib.rs index a6dad64125331..68c5d49591839 100644 --- a/src/libproc_macro_plugin/lib.rs +++ b/src/libproc_macro_plugin/lib.rs @@ -72,7 +72,7 @@ //! } //! ``` #![crate_name = "proc_macro_plugin"] -#![unstable(feature = "rustc_private", issue = "27812")] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] #![feature(plugin_registrar)] #![crate_type = "dylib"] #![crate_type = "rlib"] @@ -81,9 +81,9 @@ html_root_url = "https://doc.rust-lang.org/nightly/")] #![deny(warnings)] -#![feature(staged_api)] +#![cfg_attr(stage0, feature(staged_api))] #![feature(rustc_diagnostic_macros)] -#![feature(rustc_private)] +#![cfg_attr(stage0, feature(rustc_private))] extern crate rustc_plugin; extern crate syntax; diff --git a/src/librustc/lib.rs b/src/librustc/lib.rs index d3954326e7b72..5cf26ea8bfca5 100644 --- a/src/librustc/lib.rs +++ b/src/librustc/lib.rs @@ -15,7 +15,6 @@ //! This API is completely unstable and subject to change. #![crate_name = "rustc"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -36,15 +35,17 @@ #![feature(nonzero)] #![feature(quote)] #![feature(rustc_diagnostic_macros)] -#![feature(rustc_private)] #![feature(slice_patterns)] #![feature(specialization)] -#![feature(staged_api)] #![feature(unboxed_closures)] #![feature(discriminant_value)] #![feature(sort_unstable)] #![feature(trace_macros)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + #![recursion_limit="128"] extern crate arena; diff --git a/src/librustc_back/lib.rs b/src/librustc_back/lib.rs index 6679cc73029c7..69eabfe2ac0bf 100644 --- a/src/librustc_back/lib.rs +++ b/src/librustc_back/lib.rs @@ -22,7 +22,6 @@ //! build speedups. #![crate_name = "rustc_back"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -34,10 +33,12 @@ #![feature(const_fn)] #![feature(libc)] #![feature(rand)] -#![feature(rustc_private)] -#![feature(staged_api)] #![cfg_attr(test, feature(rand))] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + extern crate syntax; extern crate libc; extern crate serialize; diff --git a/src/librustc_bitflags/lib.rs b/src/librustc_bitflags/lib.rs index edd474b2e9edc..23558d8288342 100644 --- a/src/librustc_bitflags/lib.rs +++ b/src/librustc_bitflags/lib.rs @@ -11,11 +11,11 @@ #![crate_name = "rustc_bitflags"] #![feature(associated_consts)] -#![feature(staged_api)] #![crate_type = "rlib"] #![no_std] -#![unstable(feature = "rustc_private", issue = "27812")] #![deny(warnings)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(staged_api))] //! A typesafe bitmask flag generator. diff --git a/src/librustc_borrowck/lib.rs b/src/librustc_borrowck/lib.rs index a1d3357faf566..617326808970b 100644 --- a/src/librustc_borrowck/lib.rs +++ b/src/librustc_borrowck/lib.rs @@ -9,7 +9,6 @@ // except according to those terms. #![crate_name = "rustc_borrowck"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -21,10 +20,13 @@ #![feature(quote)] #![feature(rustc_diagnostic_macros)] -#![feature(rustc_private)] -#![feature(staged_api)] #![feature(associated_consts)] #![feature(nonzero)] + +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + #[macro_use] extern crate log; #[macro_use] extern crate syntax; extern crate syntax_pos; diff --git a/src/librustc_const_eval/lib.rs b/src/librustc_const_eval/lib.rs index fa3161a860498..8142829e81601 100644 --- a/src/librustc_const_eval/lib.rs +++ b/src/librustc_const_eval/lib.rs @@ -15,7 +15,6 @@ //! This API is completely unstable and subject to change. #![crate_name = "rustc_const_eval"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -23,8 +22,6 @@ html_root_url = "https://doc.rust-lang.org/nightly/")] #![deny(warnings)] -#![feature(rustc_private)] -#![feature(staged_api)] #![feature(rustc_diagnostic_macros)] #![feature(slice_patterns)] #![feature(box_patterns)] @@ -32,6 +29,10 @@ #![feature(const_fn)] #![feature(i128_type)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + extern crate arena; #[macro_use] extern crate syntax; #[macro_use] extern crate log; diff --git a/src/librustc_const_math/lib.rs b/src/librustc_const_math/lib.rs index b7833a5440321..528170781ea75 100644 --- a/src/librustc_const_math/lib.rs +++ b/src/librustc_const_math/lib.rs @@ -15,7 +15,6 @@ //! This API is completely unstable and subject to change. #![crate_name = "rustc_const_math"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -23,12 +22,14 @@ html_root_url = "https://doc.rust-lang.org/nightly/")] #![deny(warnings)] -#![feature(rustc_private)] -#![feature(staged_api)] #![feature(const_fn)] #![feature(i128)] #![feature(i128_type)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + extern crate syntax; extern crate serialize as rustc_serialize; // used by deriving diff --git a/src/librustc_data_structures/lib.rs b/src/librustc_data_structures/lib.rs index 00c46d992bfd5..c254dfc48d225 100644 --- a/src/librustc_data_structures/lib.rs +++ b/src/librustc_data_structures/lib.rs @@ -17,7 +17,6 @@ //! This API is completely unstable and subject to change. #![crate_name = "rustc_data_structures"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -28,8 +27,6 @@ #![feature(shared)] #![feature(collections_range)] #![feature(nonzero)] -#![feature(rustc_private)] -#![feature(staged_api)] #![feature(unboxed_closures)] #![feature(fn_traits)] #![feature(untagged_unions)] @@ -42,6 +39,10 @@ #![feature(manually_drop)] #![feature(struct_field_attributes)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + #![cfg_attr(unix, feature(libc))] #![cfg_attr(test, feature(test))] diff --git a/src/librustc_driver/lib.rs b/src/librustc_driver/lib.rs index 889f4dd4b9aac..9cee5bc0319b7 100644 --- a/src/librustc_driver/lib.rs +++ b/src/librustc_driver/lib.rs @@ -15,7 +15,6 @@ //! This API is completely unstable and subject to change. #![crate_name = "rustc_driver"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -28,9 +27,11 @@ #![feature(libc)] #![feature(quote)] #![feature(rustc_diagnostic_macros)] -#![feature(rustc_private)] #![feature(set_stdio)] -#![feature(staged_api)] + +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] extern crate arena; extern crate getopts; diff --git a/src/librustc_errors/lib.rs b/src/librustc_errors/lib.rs index db8c9ac306bba..0f2e1669a47ad 100644 --- a/src/librustc_errors/lib.rs +++ b/src/librustc_errors/lib.rs @@ -9,7 +9,6 @@ // except according to those terms. #![crate_name = "rustc_errors"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -19,11 +18,13 @@ #![feature(custom_attribute)] #![allow(unused_attributes)] -#![feature(rustc_private)] -#![feature(staged_api)] #![feature(range_contains)] #![feature(libc)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + extern crate term; extern crate libc; extern crate serialize as rustc_serialize; diff --git a/src/librustc_incremental/lib.rs b/src/librustc_incremental/lib.rs index 95f0a96fdf965..70f967d50b0e1 100644 --- a/src/librustc_incremental/lib.rs +++ b/src/librustc_incremental/lib.rs @@ -11,7 +11,6 @@ //! Support for serializing the dep-graph and reloading it. #![crate_name = "rustc_incremental"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -19,12 +18,14 @@ html_root_url = "https://doc.rust-lang.org/nightly/")] #![deny(warnings)] -#![feature(rustc_private)] -#![feature(staged_api)] #![feature(rand)] #![feature(conservative_impl_trait)] #![feature(sort_unstable)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + extern crate graphviz; #[macro_use] extern crate rustc; extern crate rustc_data_structures; diff --git a/src/librustc_lint/lib.rs b/src/librustc_lint/lib.rs index 53ea3a8333f2d..2d0b5a6a51c6b 100644 --- a/src/librustc_lint/lib.rs +++ b/src/librustc_lint/lib.rs @@ -20,7 +20,6 @@ //! This API is completely unstable and subject to change. #![crate_name = "rustc_lint"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -34,9 +33,11 @@ #![feature(i128_type)] #![feature(quote)] #![feature(rustc_diagnostic_macros)] -#![feature(rustc_private)] #![feature(slice_patterns)] -#![feature(staged_api)] + +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] #[macro_use] extern crate syntax; diff --git a/src/librustc_llvm/lib.rs b/src/librustc_llvm/lib.rs index c9b3a7ff3f3aa..790d493f1914c 100644 --- a/src/librustc_llvm/lib.rs +++ b/src/librustc_llvm/lib.rs @@ -14,7 +14,6 @@ #![allow(dead_code)] #![crate_name = "rustc_llvm"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -27,10 +26,12 @@ #![feature(concat_idents)] #![feature(libc)] #![feature(link_args)] -#![feature(staged_api)] -#![feature(rustc_private)] #![feature(static_nobundle)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + extern crate libc; #[macro_use] #[no_link] diff --git a/src/librustc_metadata/lib.rs b/src/librustc_metadata/lib.rs index 90eb2bc0f6a7d..27555f49e57fc 100644 --- a/src/librustc_metadata/lib.rs +++ b/src/librustc_metadata/lib.rs @@ -9,7 +9,6 @@ // except according to those terms. #![crate_name = "rustc_metadata"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -24,10 +23,12 @@ #![feature(proc_macro_internals)] #![feature(quote)] #![feature(rustc_diagnostic_macros)] -#![feature(rustc_private)] #![feature(specialization)] -#![feature(staged_api)] #![feature(discriminant_value)] +#![feature(rustc_private)] + +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(staged_api))] #[macro_use] extern crate log; diff --git a/src/librustc_mir/lib.rs b/src/librustc_mir/lib.rs index 5fa56bac1379b..014705bf32fa8 100644 --- a/src/librustc_mir/lib.rs +++ b/src/librustc_mir/lib.rs @@ -18,18 +18,19 @@ Rust MIR: a lowered representation of Rust. Also: an experiment! #![crate_type = "rlib"] #![crate_type = "dylib"] #![deny(warnings)] -#![unstable(feature = "rustc_private", issue = "27812")] #![feature(associated_consts)] #![feature(box_patterns)] #![feature(box_syntax)] #![feature(i128_type)] #![feature(rustc_diagnostic_macros)] -#![feature(rustc_private)] -#![feature(staged_api)] #![feature(placement_in_syntax)] #![feature(collection_placement)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + #[macro_use] extern crate log; extern crate graphviz as dot; #[macro_use] diff --git a/src/librustc_passes/lib.rs b/src/librustc_passes/lib.rs index 22566c813d86a..97f0022b8db8d 100644 --- a/src/librustc_passes/lib.rs +++ b/src/librustc_passes/lib.rs @@ -15,7 +15,6 @@ //! This API is completely unstable and subject to change. #![crate_name = "rustc_passes"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -24,8 +23,10 @@ #![deny(warnings)] #![feature(rustc_diagnostic_macros)] -#![feature(staged_api)] -#![feature(rustc_private)] + +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] #[macro_use] extern crate rustc; diff --git a/src/librustc_platform_intrinsics/lib.rs b/src/librustc_platform_intrinsics/lib.rs index dd2d60a1d22d6..21dd360c9bb74 100644 --- a/src/librustc_platform_intrinsics/lib.rs +++ b/src/librustc_platform_intrinsics/lib.rs @@ -9,10 +9,10 @@ // except according to those terms. #![crate_name = "rustc_platform_intrinsics"] -#![unstable(feature = "rustc_private", issue = "27812")] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] #![crate_type = "dylib"] #![crate_type = "rlib"] -#![feature(staged_api)] +#![cfg_attr(stage0, feature(staged_api))] #![deny(warnings)] #![allow(bad_style)] diff --git a/src/librustc_plugin/lib.rs b/src/librustc_plugin/lib.rs index 8aa680ca12d10..16ab593e47a72 100644 --- a/src/librustc_plugin/lib.rs +++ b/src/librustc_plugin/lib.rs @@ -51,7 +51,6 @@ //! for more examples. #![crate_name = "rustc_plugin"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -59,9 +58,11 @@ html_root_url = "https://doc.rust-lang.org/nightly/")] #![deny(warnings)] -#![feature(staged_api)] #![feature(rustc_diagnostic_macros)] -#![feature(rustc_private)] + +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] #[macro_use] extern crate syntax; diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index f63102433c1e6..2ced61f5753a9 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -9,7 +9,6 @@ // except according to those terms. #![crate_name = "rustc_privacy"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -18,8 +17,10 @@ #![deny(warnings)] #![feature(rustc_diagnostic_macros)] -#![feature(rustc_private)] -#![feature(staged_api)] + +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] extern crate rustc; #[macro_use] extern crate syntax; diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index ac556270886ac..ee72aee042e91 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -9,7 +9,6 @@ // except according to those terms. #![crate_name = "rustc_resolve"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -19,8 +18,10 @@ #![feature(associated_consts)] #![feature(rustc_diagnostic_macros)] -#![feature(rustc_private)] -#![feature(staged_api)] + +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] #[macro_use] extern crate log; diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index fd6898d19d84f..cc98754f61042 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -9,7 +9,6 @@ // except according to those terms. #![crate_name = "rustc_save_analysis"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -19,8 +18,10 @@ #![feature(custom_attribute)] #![allow(unused_attributes)] -#![feature(rustc_private)] -#![feature(staged_api)] + +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] #[macro_use] extern crate rustc; diff --git a/src/librustc_trans/lib.rs b/src/librustc_trans/lib.rs index 111c254772166..ff094d04c8462 100644 --- a/src/librustc_trans/lib.rs +++ b/src/librustc_trans/lib.rs @@ -15,7 +15,6 @@ //! This API is completely unstable and subject to change. #![crate_name = "rustc_trans"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -33,12 +32,14 @@ #![feature(libc)] #![feature(quote)] #![feature(rustc_diagnostic_macros)] -#![feature(rustc_private)] #![feature(slice_patterns)] -#![feature(staged_api)] #![feature(unicode)] #![feature(conservative_impl_trait)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + use rustc::dep_graph::WorkProduct; use syntax_pos::symbol::Symbol; diff --git a/src/librustc_typeck/lib.rs b/src/librustc_typeck/lib.rs index 84de4ff2b7b69..99ee1cff7fd22 100644 --- a/src/librustc_typeck/lib.rs +++ b/src/librustc_typeck/lib.rs @@ -64,7 +64,6 @@ This API is completely unstable and subject to change. */ #![crate_name = "rustc_typeck"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -81,8 +80,10 @@ This API is completely unstable and subject to change. #![feature(never_type)] #![feature(quote)] #![feature(rustc_diagnostic_macros)] -#![feature(rustc_private)] -#![feature(staged_api)] + +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] #[macro_use] extern crate log; #[macro_use] extern crate syntax; diff --git a/src/librustdoc/lib.rs b/src/librustdoc/lib.rs index 1156fadf8c02c..d89fa547a89cd 100644 --- a/src/librustdoc/lib.rs +++ b/src/librustdoc/lib.rs @@ -9,7 +9,6 @@ // except according to those terms. #![crate_name = "rustdoc"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -21,14 +20,16 @@ #![feature(box_patterns)] #![feature(box_syntax)] #![feature(libc)] -#![feature(rustc_private)] #![feature(set_stdio)] #![feature(slice_patterns)] -#![feature(staged_api)] #![feature(test)] #![feature(unicode)] #![feature(vec_remove_item)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + extern crate arena; extern crate getopts; extern crate env_logger; diff --git a/src/libserialize/lib.rs b/src/libserialize/lib.rs index 2b31e2f410806..4eb2cad5c91b9 100644 --- a/src/libserialize/lib.rs +++ b/src/libserialize/lib.rs @@ -15,9 +15,9 @@ Core encoding and decoding interfaces. */ #![crate_name = "serialize"] -#![unstable(feature = "rustc_private", +#![cfg_attr(stage0, unstable(feature = "rustc_private", reason = "deprecated in favor of rustc-serialize on crates.io", - issue = "27812")] + issue = "27812"))] #![crate_type = "rlib"] #![crate_type = "dylib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -32,7 +32,7 @@ Core encoding and decoding interfaces. #![feature(core_intrinsics)] #![feature(i128_type)] #![feature(specialization)] -#![feature(staged_api)] +#![cfg_attr(stage0, feature(staged_api))] #![cfg_attr(test, feature(test))] extern crate collections; diff --git a/src/libsyntax/lib.rs b/src/libsyntax/lib.rs index 89c67b88cbde6..32dafcdb582f0 100644 --- a/src/libsyntax/lib.rs +++ b/src/libsyntax/lib.rs @@ -15,7 +15,6 @@ //! This API is completely unstable and subject to change. #![crate_name = "syntax"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -24,12 +23,14 @@ test(attr(deny(warnings))))] #![deny(warnings)] -#![feature(rustc_private)] -#![feature(staged_api)] #![feature(unicode)] #![feature(rustc_diagnostic_macros)] #![feature(i128_type)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + extern crate serialize; #[macro_use] extern crate log; #[macro_use] extern crate bitflags; diff --git a/src/libsyntax_ext/lib.rs b/src/libsyntax_ext/lib.rs index e35e79df58520..60f5d24ac9755 100644 --- a/src/libsyntax_ext/lib.rs +++ b/src/libsyntax_ext/lib.rs @@ -11,7 +11,6 @@ //! Syntax extensions in the Rust compiler. #![crate_name = "syntax_ext"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -20,8 +19,10 @@ #![deny(warnings)] #![feature(proc_macro_internals)] -#![feature(rustc_private)] -#![feature(staged_api)] + +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] extern crate fmt_macros; extern crate log; diff --git a/src/libsyntax_pos/lib.rs b/src/libsyntax_pos/lib.rs index eb86a8e13797b..25f74aeecf404 100644 --- a/src/libsyntax_pos/lib.rs +++ b/src/libsyntax_pos/lib.rs @@ -15,7 +15,6 @@ //! This API is completely unstable and subject to change. #![crate_name = "syntax_pos"] -#![unstable(feature = "rustc_private", issue = "27812")] #![crate_type = "dylib"] #![crate_type = "rlib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -27,10 +26,12 @@ #![feature(custom_attribute)] #![feature(optin_builtin_traits)] #![allow(unused_attributes)] -#![feature(rustc_private)] -#![feature(staged_api)] #![feature(specialization)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(rustc_private))] +#![cfg_attr(stage0, feature(staged_api))] + use std::cell::{Cell, RefCell}; use std::ops::{Add, Sub}; use std::rc::Rc; diff --git a/src/libterm/lib.rs b/src/libterm/lib.rs index 370757c060910..eb0ee6ba154a1 100644 --- a/src/libterm/lib.rs +++ b/src/libterm/lib.rs @@ -41,9 +41,6 @@ //! [ti]: https://en.wikipedia.org/wiki/Terminfo #![crate_name = "term"] -#![unstable(feature = "rustc_private", - reason = "use the crates.io `term` library instead", - issue = "27812")] #![crate_type = "rlib"] #![crate_type = "dylib"] #![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png", @@ -54,13 +51,15 @@ #![deny(missing_docs)] #![deny(warnings)] -#![feature(box_syntax)] #![feature(staged_api)] #![cfg_attr(windows, feature(libc))] // Handle rustfmt skips #![feature(custom_attribute)] #![allow(unused_attributes)] +#![cfg_attr(stage0, unstable(feature = "rustc_private", issue = "27812"))] +#![cfg_attr(stage0, feature(staged_api))] + use std::io::prelude::*; pub use terminfo::TerminfoTerminal; From 861a4ed37ca9f84d73cbed4339f8ea1c001697fa Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Thu, 11 May 2017 16:58:40 -0700 Subject: [PATCH 20/23] Update to tar-0.4.12 to fix Windows paths --- src/Cargo.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Cargo.lock b/src/Cargo.lock index 99e384a8a0f66..c292d4c772c4e 100644 --- a/src/Cargo.lock +++ b/src/Cargo.lock @@ -297,7 +297,7 @@ dependencies = [ "flate2 0.2.19 (registry+/~https://github.com/rust-lang/crates.io-index)", "kernel32-sys 0.2.2 (registry+/~https://github.com/rust-lang/crates.io-index)", "lazy_static 0.2.8 (registry+/~https://github.com/rust-lang/crates.io-index)", - "tar 0.4.11 (registry+/~https://github.com/rust-lang/crates.io-index)", + "tar 0.4.12 (registry+/~https://github.com/rust-lang/crates.io-index)", "walkdir 1.0.7 (registry+/~https://github.com/rust-lang/crates.io-index)", "winapi 0.2.8 (registry+/~https://github.com/rust-lang/crates.io-index)", "xz2 0.1.3 (registry+/~https://github.com/rust-lang/crates.io-index)", @@ -992,7 +992,7 @@ dependencies = [ [[package]] name = "tar" -version = "0.4.11" +version = "0.4.12" source = "registry+/~https://github.com/rust-lang/crates.io-index" dependencies = [ "filetime 0.1.10 (registry+/~https://github.com/rust-lang/crates.io-index)", @@ -1181,7 +1181,7 @@ source = "registry+/~https://github.com/rust-lang/crates.io-index" "checksum serde 0.9.11 (registry+/~https://github.com/rust-lang/crates.io-index)" = "a702319c807c016e51f672e5c77d6f0b46afddd744b5e437d6b8436b888b458f" "checksum serde_json 0.9.9 (registry+/~https://github.com/rust-lang/crates.io-index)" = "dbc45439552eb8fb86907a2c41c1fd0ef97458efb87ff7f878db466eb581824e" "checksum strsim 0.6.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "b4d15c810519a91cf877e7e36e63fe068815c678181439f2f29e2562147c3694" -"checksum tar 0.4.11 (registry+/~https://github.com/rust-lang/crates.io-index)" = "c2374f318bbe2c5ac6c83dd6240d5f1a73106f72d39b3f7d6f8d8637c7b425d8" +"checksum tar 0.4.12 (registry+/~https://github.com/rust-lang/crates.io-index)" = "ab0ef9ead2fe0aa9e18475a96a207bfd5143f4124779ef7429503a8665416ce8" "checksum term_size 0.2.3 (registry+/~https://github.com/rust-lang/crates.io-index)" = "07b6c1ac5b3fffd75073276bca1ceed01f67a28537097a2a9539e116e50fb21a" "checksum thread-id 3.0.0 (registry+/~https://github.com/rust-lang/crates.io-index)" = "4437c97558c70d129e40629a5b385b3fb1ffac301e63941335e4d354081ec14a" "checksum thread_local 0.3.3 (registry+/~https://github.com/rust-lang/crates.io-index)" = "c85048c6260d17cf486ceae3282d9fb6b90be220bf5b28c400f5485ffc29f0c7" From 80891f6e4725efc72c27e4f224123ec292fdd7d4 Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 12 May 2017 08:21:00 +0200 Subject: [PATCH 21/23] Remove some unused macros from the rust codebase Removes unused macros from: * libcore * libcollections The last use of these two macros was removed in commit b64c9d56700e2c41207166fe8709711ff02488ff when the char_range_at_reverse function was been removed. * librustc_errors Their last use was removed by commits 2f2c3e178325dc1837badcd7573c2c0905fab979 and 11dc974a38fd533aa692cea213305056cd3a6902. * libsyntax_ext * librustc_trans Also, put the otry macro in back/msvc/mod.rs under the same cfg argument as the places that use it. --- src/libcollections/str.rs | 12 ------------ src/libcore/lib.rs | 4 ---- src/libcore/num/float_macros.rs | 20 -------------------- src/libcore/num/mod.rs | 7 ------- src/librustc_errors/emitter.rs | 15 --------------- src/librustc_trans/back/msvc/mod.rs | 1 + src/librustc_trans/lib.rs | 3 --- src/librustc_trans/macros.rs | 29 ----------------------------- src/libsyntax_ext/deriving/mod.rs | 6 ------ 9 files changed, 1 insertion(+), 96 deletions(-) delete mode 100644 src/libcore/num/float_macros.rs delete mode 100644 src/librustc_trans/macros.rs diff --git a/src/libcollections/str.rs b/src/libcollections/str.rs index 964660183e751..5f4578bbeb368 100644 --- a/src/libcollections/str.rs +++ b/src/libcollections/str.rs @@ -176,18 +176,6 @@ impl<'a> Iterator for EncodeUtf16<'a> { #[unstable(feature = "fused", issue = "35602")] impl<'a> FusedIterator for EncodeUtf16<'a> {} -// Return the initial codepoint accumulator for the first byte. -// The first byte is special, only want bottom 5 bits for width 2, 4 bits -// for width 3, and 3 bits for width 4 -macro_rules! utf8_first_byte { - ($byte:expr, $width:expr) => (($byte & (0x7F >> $width)) as u32) -} - -// return the value of $ch updated with continuation byte $byte -macro_rules! utf8_acc_cont_byte { - ($ch:expr, $byte:expr) => (($ch << 6) | ($byte & 63) as u32) -} - #[stable(feature = "rust1", since = "1.0.0")] impl Borrow for String { #[inline] diff --git a/src/libcore/lib.rs b/src/libcore/lib.rs index 80c2221ce6416..b6ab1ecaf4e65 100644 --- a/src/libcore/lib.rs +++ b/src/libcore/lib.rs @@ -104,10 +104,6 @@ mod macros; #[macro_use] mod internal_macros; -#[path = "num/float_macros.rs"] -#[macro_use] -mod float_macros; - #[path = "num/int_macros.rs"] #[macro_use] mod int_macros; diff --git a/src/libcore/num/float_macros.rs b/src/libcore/num/float_macros.rs deleted file mode 100644 index b3adef53dabee..0000000000000 --- a/src/libcore/num/float_macros.rs +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2014 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -#![doc(hidden)] - -macro_rules! assert_approx_eq { - ($a:expr, $b:expr) => ({ - use num::Float; - let (a, b) = (&$a, &$b); - assert!((*a - *b).abs() < 1.0e-6, - "{} is not approximately equal to {}", *a, *b); - }) -} diff --git a/src/libcore/num/mod.rs b/src/libcore/num/mod.rs index 18e2c1d5c73fd..8b4002fe9af24 100644 --- a/src/libcore/num/mod.rs +++ b/src/libcore/num/mod.rs @@ -96,13 +96,6 @@ pub mod dec2flt; pub mod bignum; pub mod diy_float; -macro_rules! checked_op { - ($U:ty, $op:path, $x:expr, $y:expr) => {{ - let (result, overflowed) = unsafe { $op($x as $U, $y as $U) }; - if overflowed { None } else { Some(result as Self) } - }} -} - // `Int` + `SignedInt` implemented for signed integers macro_rules! int_impl { ($SelfT:ty, $ActualT:ident, $UnsignedT:ty, $BITS:expr, diff --git a/src/librustc_errors/emitter.rs b/src/librustc_errors/emitter.rs index 53999eb9138b6..34c138eca9ee6 100644 --- a/src/librustc_errors/emitter.rs +++ b/src/librustc_errors/emitter.rs @@ -95,21 +95,6 @@ struct FileWithAnnotatedLines { multiline_depth: usize, } - -/// Do not use this for messages that end in `\n` – use `println_maybe_styled` instead. See -/// `EmitterWriter::print_maybe_styled` for details. -macro_rules! print_maybe_styled { - ($dst: expr, $style: expr, $($arg: tt)*) => { - $dst.print_maybe_styled(format_args!($($arg)*), $style, false) - } -} - -macro_rules! println_maybe_styled { - ($dst: expr, $style: expr, $($arg: tt)*) => { - $dst.print_maybe_styled(format_args!($($arg)*), $style, true) - } -} - impl EmitterWriter { pub fn stderr(color_config: ColorConfig, code_map: Option>) -> EmitterWriter { if color_config.use_color() { diff --git a/src/librustc_trans/back/msvc/mod.rs b/src/librustc_trans/back/msvc/mod.rs index 16aef6ee8ca35..31f3415b1ecd0 100644 --- a/src/librustc_trans/back/msvc/mod.rs +++ b/src/librustc_trans/back/msvc/mod.rs @@ -32,6 +32,7 @@ //! comments can also be found below leading through the various code paths. // A simple macro to make this option mess easier to read +#[cfg(windows)] macro_rules! otry { ($expr:expr) => (match $expr { Some(val) => val, diff --git a/src/librustc_trans/lib.rs b/src/librustc_trans/lib.rs index 111c254772166..14b6650c49335 100644 --- a/src/librustc_trans/lib.rs +++ b/src/librustc_trans/lib.rs @@ -85,9 +85,6 @@ pub mod back { pub mod diagnostics; -#[macro_use] -mod macros; - mod abi; mod adt; mod asm; diff --git a/src/librustc_trans/macros.rs b/src/librustc_trans/macros.rs deleted file mode 100644 index 77efcc6fb0030..0000000000000 --- a/src/librustc_trans/macros.rs +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright 2012 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 or the MIT license -// , at your -// option. This file may not be copied, modified, or distributed -// except according to those terms. - -macro_rules! unpack_datum { - ($bcx: ident, $inp: expr) => ( - { - let db = $inp; - $bcx = db.bcx; - db.datum - } - ) -} - -macro_rules! unpack_result { - ($bcx: ident, $inp: expr) => ( - { - let db = $inp; - $bcx = db.bcx; - db.val - } - ) -} diff --git a/src/libsyntax_ext/deriving/mod.rs b/src/libsyntax_ext/deriving/mod.rs index b2bb43e41ed9e..31c7cc3367677 100644 --- a/src/libsyntax_ext/deriving/mod.rs +++ b/src/libsyntax_ext/deriving/mod.rs @@ -25,12 +25,6 @@ macro_rules! pathvec { ) } -macro_rules! path { - ($($x:tt)*) => ( - ::ext::deriving::generic::ty::Path::new( pathvec![ $($x)* ] ) - ) -} - macro_rules! path_local { ($x:ident) => ( ::deriving::generic::ty::Path::new_local(stringify!($x)) From b47aa1b34d395d73686468beea09d87f7ae9906d Mon Sep 17 00:00:00 2001 From: est31 Date: Fri, 12 May 2017 13:29:08 +0200 Subject: [PATCH 22/23] config.toml.example: add note that optimize = false won't speed up a full bootstrap --- src/bootstrap/config.toml.example | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/bootstrap/config.toml.example b/src/bootstrap/config.toml.example index 0309eca0e5dea..25da976a555e9 100644 --- a/src/bootstrap/config.toml.example +++ b/src/bootstrap/config.toml.example @@ -175,6 +175,9 @@ [rust] # Whether or not to optimize the compiler and standard library +# Note: the slowness of the non optimized compiler compiling itself usually +# outweighs the time gains in not doing optimizations, therefore a +# full bootstrap takes much more time with optimize set to false. #optimize = true # Number of codegen units to use for each compiler invocation. A value of 0 From 7a03b4c75ad985812467742faa8d76a14a4bf601 Mon Sep 17 00:00:00 2001 From: Tommy Ip Date: Fri, 12 May 2017 12:48:18 +0100 Subject: [PATCH 23/23] Fix unexpected panic with the -Z treat-err-as-bug option This fix an issue where the compiler panics even if there is no error when passed with the `-Z treat-err-as-bug` option. Fixes #35886. --- src/librustc_errors/diagnostic_builder.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/librustc_errors/diagnostic_builder.rs b/src/librustc_errors/diagnostic_builder.rs index a9c2bbeba2aa4..84fb4b192750b 100644 --- a/src/librustc_errors/diagnostic_builder.rs +++ b/src/librustc_errors/diagnostic_builder.rs @@ -99,7 +99,10 @@ impl<'a> DiagnosticBuilder<'a> { self.handler.emitter.borrow_mut().emit(&self); self.cancel(); - self.handler.panic_if_treat_err_as_bug(); + + if self.level == Level::Error { + self.handler.panic_if_treat_err_as_bug(); + } // if self.is_fatal() { // panic!(FatalError);