From ef74bc21460eab26a2e856d0badcf49c09b60213 Mon Sep 17 00:00:00 2001 From: Lzu Tao Date: Tue, 31 Dec 2019 14:09:32 +0000 Subject: [PATCH 1/6] make use of pointer::is_null --- src/libpanic_unwind/emcc.rs | 2 +- src/libstd/sys/hermit/os.rs | 8 ++++++-- src/libstd/sys/hermit/thread_local.rs | 4 ++-- src/libstd/sys/sgx/abi/tls.rs | 2 +- src/libstd/sys/unix/os.rs | 10 ++++++---- src/libstd/sys/vxworks/os.rs | 6 +++--- src/libstd/sys/wasi/os.rs | 10 ++++++---- src/libstd/sys/windows/os.rs | 2 +- 8 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/libpanic_unwind/emcc.rs b/src/libpanic_unwind/emcc.rs index 2098404ee1b9d..9d3fe5254f8a9 100644 --- a/src/libpanic_unwind/emcc.rs +++ b/src/libpanic_unwind/emcc.rs @@ -63,7 +63,7 @@ pub unsafe fn cleanup(ptr: *mut u8) -> Box { pub unsafe fn panic(data: Box) -> u32 { let sz = mem::size_of_val(&data); let exception = __cxa_allocate_exception(sz); - if exception == ptr::null_mut() { + if exception.is_null() { return uw::_URC_FATAL_PHASE1_ERROR as u32; } ptr::write(exception as *mut _, data); diff --git a/src/libstd/sys/hermit/os.rs b/src/libstd/sys/hermit/os.rs index 5999fdd4f8d58..5a5808f07e956 100644 --- a/src/libstd/sys/hermit/os.rs +++ b/src/libstd/sys/hermit/os.rs @@ -77,13 +77,17 @@ pub fn init_environment(env: *const *const i8) { unsafe { ENV = Some(Mutex::new(HashMap::new())); + if env.is_null() { + return; + } + let mut guard = ENV.as_ref().unwrap().lock().unwrap(); let mut environ = env; - while environ != ptr::null() && *environ != ptr::null() { + while !(*environ).is_null() { if let Some((key, value)) = parse(CStr::from_ptr(*environ).to_bytes()) { guard.insert(key, value); } - environ = environ.offset(1); + environ = environ.add(1); } } diff --git a/src/libstd/sys/hermit/thread_local.rs b/src/libstd/sys/hermit/thread_local.rs index ba967c7676c3f..c6f8adb21623a 100644 --- a/src/libstd/sys/hermit/thread_local.rs +++ b/src/libstd/sys/hermit/thread_local.rs @@ -18,14 +18,14 @@ static KEYS_LOCK: Mutex = Mutex::new(); static mut LOCALS: *mut BTreeMap = ptr::null_mut(); unsafe fn keys() -> &'static mut BTreeMap> { - if KEYS == ptr::null_mut() { + if KEYS.is_null() { KEYS = Box::into_raw(Box::new(BTreeMap::new())); } &mut *KEYS } unsafe fn locals() -> &'static mut BTreeMap { - if LOCALS == ptr::null_mut() { + if LOCALS.is_null() { LOCALS = Box::into_raw(Box::new(BTreeMap::new())); } &mut *LOCALS diff --git a/src/libstd/sys/sgx/abi/tls.rs b/src/libstd/sys/sgx/abi/tls.rs index 81a766e367d6e..2b0485c4f0363 100644 --- a/src/libstd/sys/sgx/abi/tls.rs +++ b/src/libstd/sys/sgx/abi/tls.rs @@ -70,7 +70,7 @@ impl<'a> Drop for ActiveTls<'a> { any_non_null_dtor = false; for (value, dtor) in TLS_KEY_IN_USE.iter().filter_map(&value_with_destructor) { let value = value.replace(ptr::null_mut()); - if value != ptr::null_mut() { + if !value.is_null() { any_non_null_dtor = true; unsafe { dtor(value) } } diff --git a/src/libstd/sys/unix/os.rs b/src/libstd/sys/unix/os.rs index b0b14725344a2..79647f8137ef5 100644 --- a/src/libstd/sys/unix/os.rs +++ b/src/libstd/sys/unix/os.rs @@ -480,11 +480,13 @@ pub fn env() -> Env { let _guard = env_lock(); let mut environ = *environ(); let mut result = Vec::new(); - while environ != ptr::null() && *environ != ptr::null() { - if let Some(key_value) = parse(CStr::from_ptr(*environ).to_bytes()) { - result.push(key_value); + if !environ.is_null() { + while !(*environ).is_null() { + if let Some(key_value) = parse(CStr::from_ptr(*environ).to_bytes()) { + result.push(key_value); + } + environ = environ.add(1); } - environ = environ.offset(1); } return Env { iter: result.into_iter(), _dont_send_or_sync_me: PhantomData }; } diff --git a/src/libstd/sys/vxworks/os.rs b/src/libstd/sys/vxworks/os.rs index 3f207cabf97d3..429951b280421 100644 --- a/src/libstd/sys/vxworks/os.rs +++ b/src/libstd/sys/vxworks/os.rs @@ -226,15 +226,15 @@ pub fn env() -> Env { unsafe { let _guard = env_lock(); let mut environ = *environ(); - if environ == ptr::null() { + if environ.is_null() { panic!("os::env() failure getting env string from OS: {}", io::Error::last_os_error()); } let mut result = Vec::new(); - while *environ != ptr::null() { + while !(*environ).is_null() { if let Some(key_value) = parse(CStr::from_ptr(*environ).to_bytes()) { result.push(key_value); } - environ = environ.offset(1); + environ = environ.add(1); } return Env { iter: result.into_iter(), _dont_send_or_sync_me: PhantomData }; } diff --git a/src/libstd/sys/wasi/os.rs b/src/libstd/sys/wasi/os.rs index 44a08a2f0585d..ca811af065d30 100644 --- a/src/libstd/sys/wasi/os.rs +++ b/src/libstd/sys/wasi/os.rs @@ -107,11 +107,13 @@ pub fn env() -> Env { let _guard = env_lock(); let mut environ = libc::environ; let mut result = Vec::new(); - while environ != ptr::null_mut() && *environ != ptr::null_mut() { - if let Some(key_value) = parse(CStr::from_ptr(*environ).to_bytes()) { - result.push(key_value); + if !environ.is_null() { + while !(*environ).is_null() { + if let Some(key_value) = parse(CStr::from_ptr(*environ).to_bytes()) { + result.push(key_value); + } + environ = environ.add(1); } - environ = environ.offset(1); } return Env { iter: result.into_iter(), _dont_send_or_sync_me: PhantomData }; } diff --git a/src/libstd/sys/windows/os.rs b/src/libstd/sys/windows/os.rs index e7fa61dd0f6b9..6ddb9879980bb 100644 --- a/src/libstd/sys/windows/os.rs +++ b/src/libstd/sys/windows/os.rs @@ -43,7 +43,7 @@ pub fn error_string(mut errnum: i32) -> String { ]; module = c::GetModuleHandleW(NTDLL_DLL.as_ptr()); - if module != ptr::null_mut() { + if !module.is_null() { errnum ^= c::FACILITY_NT_BIT as i32; flags = c::FORMAT_MESSAGE_FROM_HMODULE; } From 7c52718ba22179451bca76d246037a5f7480eae1 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Wed, 8 Jan 2020 09:44:45 -0800 Subject: [PATCH 2/6] Remove obsolete llvm_tools flag --- src/bootstrap/tool.rs | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/bootstrap/tool.rs b/src/bootstrap/tool.rs index 9fd20386e367b..89245825ed5b9 100644 --- a/src/bootstrap/tool.rs +++ b/src/bootstrap/tool.rs @@ -289,7 +289,6 @@ fn rustbook_features() -> Vec { macro_rules! bootstrap_tool { ($( $name:ident, $path:expr, $tool_name:expr - $(,llvm_tools = $llvm:expr)* $(,is_external_tool = $external:expr)* $(,features = $features:expr)* ; @@ -301,15 +300,6 @@ macro_rules! bootstrap_tool { )+ } - impl Tool { - /// Whether this tool requires LLVM to run - pub fn uses_llvm_tools(&self) -> bool { - match self { - $(Tool::$name => false $(|| $llvm)*,)+ - } - } - } - impl<'a> Builder<'a> { pub fn tool_exe(&self, tool: Tool) -> PathBuf { match tool { @@ -377,7 +367,7 @@ bootstrap_tool!( Tidy, "src/tools/tidy", "tidy"; Linkchecker, "src/tools/linkchecker", "linkchecker"; CargoTest, "src/tools/cargotest", "cargotest"; - Compiletest, "src/tools/compiletest", "compiletest", llvm_tools = true; + Compiletest, "src/tools/compiletest", "compiletest"; BuildManifest, "src/tools/build-manifest", "build-manifest"; RemoteTestClient, "src/tools/remote-test-client", "remote-test-client"; RustInstaller, "src/tools/rust-installer", "fabricate", is_external_tool = true; From 51b7044347d2cb9e2eae18ad49c79803dda60be2 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Wed, 8 Jan 2020 10:04:18 -0800 Subject: [PATCH 3/6] Build compiletest with in-tree libtest --- src/bootstrap/tool.rs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/bootstrap/tool.rs b/src/bootstrap/tool.rs index 89245825ed5b9..7f24768a4f10e 100644 --- a/src/bootstrap/tool.rs +++ b/src/bootstrap/tool.rs @@ -290,6 +290,7 @@ macro_rules! bootstrap_tool { ($( $name:ident, $path:expr, $tool_name:expr $(,is_external_tool = $external:expr)* + $(,is_unstable_tool = $unstable:expr)* $(,features = $features:expr)* ; )+) => { @@ -340,7 +341,12 @@ macro_rules! bootstrap_tool { compiler: self.compiler, target: self.target, tool: $tool_name, - mode: Mode::ToolBootstrap, + mode: if false $(|| $unstable)* { + // use in-tree libraries for unstable features + Mode::ToolStd + } else { + Mode::ToolBootstrap + }, path: $path, is_optional_tool: false, source_type: if false $(|| $external)* { @@ -367,7 +373,7 @@ bootstrap_tool!( Tidy, "src/tools/tidy", "tidy"; Linkchecker, "src/tools/linkchecker", "linkchecker"; CargoTest, "src/tools/cargotest", "cargotest"; - Compiletest, "src/tools/compiletest", "compiletest"; + Compiletest, "src/tools/compiletest", "compiletest", is_unstable_tool = true; BuildManifest, "src/tools/build-manifest", "build-manifest"; RemoteTestClient, "src/tools/remote-test-client", "remote-test-client"; RustInstaller, "src/tools/rust-installer", "fabricate", is_external_tool = true; From 686d5f83efcd552465ce4ab236f2ffb66c055d90 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Wed, 8 Jan 2020 15:13:50 -0800 Subject: [PATCH 4/6] Comment on allowing only feature(test) in compiletest --- src/tools/compiletest/src/main.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/tools/compiletest/src/main.rs b/src/tools/compiletest/src/main.rs index da1e3760e010d..0642823404aed 100644 --- a/src/tools/compiletest/src/main.rs +++ b/src/tools/compiletest/src/main.rs @@ -1,6 +1,8 @@ #![crate_name = "compiletest"] -#![feature(test)] #![deny(warnings)] +// The `test` crate is the only unstable feature +// allowed here, just to share similar code. +#![feature(test)] extern crate test; From 826780772e3fdd8fa5f491647f849d0be4cb6356 Mon Sep 17 00:00:00 2001 From: Andy Russell Date: Wed, 8 Jan 2020 21:43:54 -0500 Subject: [PATCH 5/6] remove strip-hidden pass from compiler doc generation --- src/bootstrap/doc.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bootstrap/doc.rs b/src/bootstrap/doc.rs index 8cd7fc2c17257..e98ac8d6f477c 100644 --- a/src/bootstrap/doc.rs +++ b/src/bootstrap/doc.rs @@ -531,7 +531,7 @@ impl Step for Rustc { // Build cargo command. let mut cargo = builder.cargo(compiler, Mode::Rustc, target, "doc"); - cargo.env("RUSTDOCFLAGS", "--document-private-items --passes strip-hidden"); + cargo.env("RUSTDOCFLAGS", "--document-private-items"); compile::rustc_cargo(builder, &mut cargo, target); // Only include compiler crates, no dependencies of those, such as `libc`. From 870ca3140896292851c16485403238c560f561b2 Mon Sep 17 00:00:00 2001 From: Oliver Middleton Date: Thu, 9 Jan 2020 23:45:06 +0000 Subject: [PATCH 6/6] rustbuild: Cleanup book generation The Cargo book can be generated the same way as the other books. --- src/bootstrap/doc.rs | 86 ++++++++------------------------------------ 1 file changed, 14 insertions(+), 72 deletions(-) diff --git a/src/bootstrap/doc.rs b/src/bootstrap/doc.rs index 8cd7fc2c17257..5f03723b068ad 100644 --- a/src/bootstrap/doc.rs +++ b/src/bootstrap/doc.rs @@ -49,7 +49,7 @@ macro_rules! book { builder.ensure(RustbookSrc { target: self.target, name: INTERNER.intern_str($book_name), - src: doc_src(builder), + src: INTERNER.intern_path(builder.src.join($path)), }) } } @@ -60,6 +60,7 @@ macro_rules! book { // NOTE: When adding a book here, make sure to ALSO build the book by // adding a build step in `src/bootstrap/builder.rs`! book!( + CargoBook, "src/tools/cargo/src/doc", "cargo"; EditionGuide, "src/doc/edition-guide", "edition-guide"; EmbeddedBook, "src/doc/embedded-book", "embedded-book"; Nomicon, "src/doc/nomicon", "nomicon"; @@ -69,10 +70,6 @@ book!( RustdocBook, "src/doc/rustdoc", "rustdoc"; ); -fn doc_src(builder: &Builder<'_>) -> Interned { - INTERNER.intern_path(builder.src.join("src/doc")) -} - #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] pub struct UnstableBook { target: Interned, @@ -96,48 +93,11 @@ impl Step for UnstableBook { builder.ensure(RustbookSrc { target: self.target, name: INTERNER.intern_str("unstable-book"), - src: builder.md_doc_out(self.target), + src: INTERNER.intern_path(builder.md_doc_out(self.target).join("unstable-book")), }) } } -#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] -pub struct CargoBook { - target: Interned, - name: Interned, -} - -impl Step for CargoBook { - type Output = (); - const DEFAULT: bool = true; - - fn should_run(run: ShouldRun<'_>) -> ShouldRun<'_> { - let builder = run.builder; - run.path("src/tools/cargo/src/doc/book").default_condition(builder.config.docs) - } - - fn make_run(run: RunConfig<'_>) { - run.builder.ensure(CargoBook { target: run.target, name: INTERNER.intern_str("cargo") }); - } - - fn run(self, builder: &Builder<'_>) { - let target = self.target; - let name = self.name; - let src = builder.src.join("src/tools/cargo/src/doc"); - - let out = builder.doc_out(target); - t!(fs::create_dir_all(&out)); - - let out = out.join(name); - - builder.info(&format!("Cargo Book ({}) - {}", target, name)); - - let _ = fs::remove_dir_all(&out); - - builder.run(builder.tool_cmd(Tool::Rustbook).arg("build").arg(&src).arg("-d").arg(out)); - } -} - #[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] struct RustbookSrc { target: Interned, @@ -164,7 +124,6 @@ impl Step for RustbookSrc { t!(fs::create_dir_all(&out)); let out = out.join(name); - let src = src.join(name); let index = out.join("index.html"); let rustbook = builder.tool_exe(Tool::Rustbook); let mut rustbook_cmd = builder.tool_cmd(Tool::Rustbook); @@ -182,7 +141,6 @@ impl Step for RustbookSrc { pub struct TheBook { compiler: Compiler, target: Interned, - name: &'static str, } impl Step for TheBook { @@ -198,7 +156,6 @@ impl Step for TheBook { run.builder.ensure(TheBook { compiler: run.builder.compiler(run.builder.top_stage, run.builder.config.build), target: run.target, - name: "book", }); } @@ -206,45 +163,30 @@ impl Step for TheBook { /// /// We need to build: /// - /// * Book (first edition) - /// * Book (second edition) + /// * Book + /// * Older edition redirects /// * Version info and CSS /// * Index page /// * Redirect pages fn run(self, builder: &Builder<'_>) { let compiler = self.compiler; let target = self.target; - let name = self.name; // build book builder.ensure(RustbookSrc { target, - name: INTERNER.intern_string(name.to_string()), - src: doc_src(builder), + name: INTERNER.intern_str("book"), + src: INTERNER.intern_path(builder.src.join("src/doc/book")), }); // building older edition redirects - - let source_name = format!("{}/first-edition", name); - builder.ensure(RustbookSrc { - target, - name: INTERNER.intern_string(source_name), - src: doc_src(builder), - }); - - let source_name = format!("{}/second-edition", name); - builder.ensure(RustbookSrc { - target, - name: INTERNER.intern_string(source_name), - src: doc_src(builder), - }); - - let source_name = format!("{}/2018-edition", name); - builder.ensure(RustbookSrc { - target, - name: INTERNER.intern_string(source_name), - src: doc_src(builder), - }); + for edition in &["first-edition", "second-edition", "2018-edition"] { + builder.ensure(RustbookSrc { + target, + name: INTERNER.intern_string(format!("book/{}", edition)), + src: INTERNER.intern_path(builder.src.join("src/doc/book").join(edition)), + }); + } // build the version info page and CSS builder.ensure(Standalone { compiler, target });