From 0a1ce8277c0a8d7eed7a7d0a62ce0adcba342572 Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Tue, 19 Apr 2022 17:16:24 -0700 Subject: [PATCH 1/9] Make `BorrowedFd::borrow_raw` a const fn. Making `BorrowedFd::borrow_raw` a const fn allows it to be used to create a constant `BorrowedFd<'static>` holding constants such as `AT_FDCWD`. This will allow [`rustix::fs::cwd`] to become a const fn. For consistency, make similar changes to `BorrowedHandle::borrow_raw` and `BorrowedSocket::borrow_raw`. [`rustix::fs::cwd`]: https://docs.rs/rustix/latest/rustix/fs/fn.cwd.html --- library/std/src/os/fd/owned.rs | 4 ++-- library/std/src/os/windows/io/handle.rs | 2 +- library/std/src/os/windows/io/socket.rs | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/library/std/src/os/fd/owned.rs b/library/std/src/os/fd/owned.rs index e6013c7c051e5..bfc5ce0156415 100644 --- a/library/std/src/os/fd/owned.rs +++ b/library/std/src/os/fd/owned.rs @@ -66,8 +66,8 @@ impl BorrowedFd<'_> { /// the returned `BorrowedFd`, and it must not have the value `-1`. #[inline] #[unstable(feature = "io_safety", issue = "87074")] - pub unsafe fn borrow_raw(fd: RawFd) -> Self { - assert_ne!(fd, u32::MAX as RawFd); + pub const unsafe fn borrow_raw(fd: RawFd) -> Self { + assert!(fd != u32::MAX as RawFd); // SAFETY: we just asserted that the value is in the valid range and isn't `-1` (the only value bigger than `0xFF_FF_FF_FE` unsigned) unsafe { Self { fd, _phantom: PhantomData } } } diff --git a/library/std/src/os/windows/io/handle.rs b/library/std/src/os/windows/io/handle.rs index ee30cc8be6b57..bf2d354cda672 100644 --- a/library/std/src/os/windows/io/handle.rs +++ b/library/std/src/os/windows/io/handle.rs @@ -137,7 +137,7 @@ impl BorrowedHandle<'_> { /// [here]: https://devblogs.microsoft.com/oldnewthing/20040302-00/?p=40443 #[inline] #[unstable(feature = "io_safety", issue = "87074")] - pub unsafe fn borrow_raw(handle: RawHandle) -> Self { + pub const unsafe fn borrow_raw(handle: RawHandle) -> Self { Self { handle, _phantom: PhantomData } } } diff --git a/library/std/src/os/windows/io/socket.rs b/library/std/src/os/windows/io/socket.rs index db93cd15d4ab7..c14a1d6192fa2 100644 --- a/library/std/src/os/windows/io/socket.rs +++ b/library/std/src/os/windows/io/socket.rs @@ -71,8 +71,8 @@ impl BorrowedSocket<'_> { /// `INVALID_SOCKET`. #[inline] #[unstable(feature = "io_safety", issue = "87074")] - pub unsafe fn borrow_raw(socket: RawSocket) -> Self { - debug_assert_ne!(socket, c::INVALID_SOCKET as RawSocket); + pub const unsafe fn borrow_raw(socket: RawSocket) -> Self { + assert!(socket != c::INVALID_SOCKET as RawSocket); Self { socket, _phantom: PhantomData } } } From bb4ecc3fd8d0d8c0fa490feba294e300185862e6 Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Mon, 9 May 2022 17:50:39 -0700 Subject: [PATCH 2/9] rustdoc: correct path to type alias methods --- src/librustdoc/formats/cache.rs | 3 ++- src/test/rustdoc-js-std/asrawfd.js | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/test/rustdoc-js-std/asrawfd.js diff --git a/src/librustdoc/formats/cache.rs b/src/librustdoc/formats/cache.rs index 30190138750ca..862f0ecd0de02 100644 --- a/src/librustdoc/formats/cache.rs +++ b/src/librustdoc/formats/cache.rs @@ -293,7 +293,8 @@ impl<'a, 'tcx> DocFolder for CacheBuilder<'a, 'tcx> { ItemType::Trait | ItemType::Struct | ItemType::Union - | ItemType::Enum, + | ItemType::Enum + | ItemType::Typedef, )) => Some(&fqp[..fqp.len() - 1]), Some(..) => Some(&*self.cache.stack), None => None, diff --git a/src/test/rustdoc-js-std/asrawfd.js b/src/test/rustdoc-js-std/asrawfd.js new file mode 100644 index 0000000000000..37168fc493775 --- /dev/null +++ b/src/test/rustdoc-js-std/asrawfd.js @@ -0,0 +1,14 @@ +// exact-match + +const QUERY = 'RawFd::as_raw_fd'; + +const EXPECTED = { + 'others': [ + // Reproduction test for https://github.com/rust-lang/rust/issues/78724 + // Validate that type alias methods get the correct path. + { 'path': 'std::os::unix::io::AsRawFd', 'name': 'as_raw_fd' }, + { 'path': 'std::os::wasi::io::AsRawFd', 'name': 'as_raw_fd' }, + { 'path': 'std::os::linux::process::PidFd', 'name': 'as_raw_fd' }, + { 'path': 'std::os::unix::io::RawFd', 'name': 'as_raw_fd' }, + ], +}; From c7d5e40f7e2ea739c27a652ad6c9d990852500af Mon Sep 17 00:00:00 2001 From: Yuki Okushi Date: Tue, 10 May 2022 20:52:01 +0900 Subject: [PATCH 3/9] Add regression test for #68408 --- .../dead-code/issue-68408-false-positive.rs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/test/ui/lint/dead-code/issue-68408-false-positive.rs diff --git a/src/test/ui/lint/dead-code/issue-68408-false-positive.rs b/src/test/ui/lint/dead-code/issue-68408-false-positive.rs new file mode 100644 index 0000000000000..7ee6b5d72889f --- /dev/null +++ b/src/test/ui/lint/dead-code/issue-68408-false-positive.rs @@ -0,0 +1,22 @@ +// check-pass + +// Make sure we don't have any false positives here. + +#![deny(dead_code)] + +enum X { + A { _a: () }, + B { _b: () }, +} +impl X { + fn a() -> X { + X::A { _a: () } + } + fn b() -> Self { + Self::B { _b: () } + } +} + +fn main() { + let (_, _) = (X::a(), X::b()); +} From f82b3a16d56801d7f94a0b917c2af3cca09acdd2 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Tue, 10 May 2022 16:40:14 +0200 Subject: [PATCH 4/9] Fix JS error in source code pages --- src/librustdoc/html/static/js/source-script.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/librustdoc/html/static/js/source-script.js b/src/librustdoc/html/static/js/source-script.js index 92ecd200081b9..15e3bdf47b2b1 100644 --- a/src/librustdoc/html/static/js/source-script.js +++ b/src/librustdoc/html/static/js/source-script.js @@ -1,5 +1,5 @@ // From rust: -/* global search, sourcesIndex */ +/* global sourcesIndex */ // Local js definitions: /* global addClass, getCurrentValue, hasClass, onEachLazy, removeClass, browserSupportsHistoryApi */ @@ -69,7 +69,6 @@ function createDirEntry(elem, parent, fullPath, currentFile, hasFoundFile) { files.appendChild(file); } } - search.fullPath = fullPath; children.appendChild(files); parent.appendChild(name); parent.appendChild(children); From f9fc7ef0979bf2aafe6bfb67b3f112cfd4fee414 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Tue, 10 May 2022 16:40:32 +0200 Subject: [PATCH 5/9] Remove unused CSS rule --- src/librustdoc/html/static/css/rustdoc.css | 1 - 1 file changed, 1 deletion(-) diff --git a/src/librustdoc/html/static/css/rustdoc.css b/src/librustdoc/html/static/css/rustdoc.css index eb3ce37e313d0..0f4d842f4336d 100644 --- a/src/librustdoc/html/static/css/rustdoc.css +++ b/src/librustdoc/html/static/css/rustdoc.css @@ -331,7 +331,6 @@ li { nav.sub { position: relative; font-size: 1rem; - text-transform: uppercase; } .sub-container { From fe4fa53fa81fb0cc189974f700354672a90a6b07 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Tue, 10 May 2022 16:42:34 +0200 Subject: [PATCH 6/9] Clean up rustdoc GUI test --- src/test/rustdoc-gui/sidebar-source-code-display.goml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/rustdoc-gui/sidebar-source-code-display.goml b/src/test/rustdoc-gui/sidebar-source-code-display.goml index 377ee9c6eeff3..0066a38eaa540 100644 --- a/src/test/rustdoc-gui/sidebar-source-code-display.goml +++ b/src/test/rustdoc-gui/sidebar-source-code-display.goml @@ -15,6 +15,5 @@ assert-css: ("#sidebar-toggle", {"visibility": "visible", "opacity": 1}) assert-css: (".sidebar > *:not(#sidebar-toggle)", {"visibility": "hidden", "opacity": 0}) // Let's expand the sidebar now. click: "#sidebar-toggle" -// Because of the transition CSS, better wait a second before checking. +// Because of the transition CSS, we check by using `wait-for-css` instead of `assert-css`. wait-for-css: ("#sidebar-toggle", {"visibility": "visible", "opacity": 1}) -assert-css: (".sidebar > *:not(#sidebar-toggle)", {"visibility": "visible", "opacity": 1}) From d63f82e1efbfbe2344ffa3a47602faaee6429d04 Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Tue, 10 May 2022 14:50:31 +0000 Subject: [PATCH 7/9] Use lifetimes on type-alias-impl-trait used in function signatures to infer output type lifetimes --- compiler/rustc_middle/src/ty/fold.rs | 2 +- .../type-alias-impl-trait/constrain_inputs.rs | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/test/ui/type-alias-impl-trait/constrain_inputs.rs diff --git a/compiler/rustc_middle/src/ty/fold.rs b/compiler/rustc_middle/src/ty/fold.rs index 896a8280551d2..a2a450d76f18a 100644 --- a/compiler/rustc_middle/src/ty/fold.rs +++ b/compiler/rustc_middle/src/ty/fold.rs @@ -1349,7 +1349,7 @@ impl<'tcx> TypeVisitor<'tcx> for LateBoundRegionsCollector { // ignore the inputs to a projection, as they may not appear // in the normalized form if self.just_constrained { - if let ty::Projection(..) | ty::Opaque(..) = t.kind() { + if let ty::Projection(..) = t.kind() { return ControlFlow::CONTINUE; } } diff --git a/src/test/ui/type-alias-impl-trait/constrain_inputs.rs b/src/test/ui/type-alias-impl-trait/constrain_inputs.rs new file mode 100644 index 0000000000000..c32174288ee68 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/constrain_inputs.rs @@ -0,0 +1,17 @@ +// check-pass + +#![feature(type_alias_impl_trait)] + +mod foo { + type Ty<'a> = impl Sized; + fn defining(s: &str) -> Ty<'_> { s } + fn execute(ty: Ty<'_>) -> &str { todo!() } +} + +mod bar { + type Ty<'a> = impl FnOnce() -> &'a str; + fn defining(s: &str) -> Ty<'_> { move || s } + fn execute(ty: Ty<'_>) -> &str { ty() } +} + +fn main() {} From 6257bd2f4ef748d9bad0c60d0df5201e824f4fde Mon Sep 17 00:00:00 2001 From: Michael Howell Date: Tue, 10 May 2022 08:59:59 -0700 Subject: [PATCH 8/9] rustdoc: clean up method path index This removes a special case that doesn't seem to do anything any more. --- src/librustdoc/formats/cache.rs | 10 +--------- src/test/rustdoc-js/foreign-type-path.js | 9 +++++++++ src/test/rustdoc-js/foreign-type-path.rs | 13 +++++++++++++ 3 files changed, 23 insertions(+), 9 deletions(-) create mode 100644 src/test/rustdoc-js/foreign-type-path.js create mode 100644 src/test/rustdoc-js/foreign-type-path.rs diff --git a/src/librustdoc/formats/cache.rs b/src/librustdoc/formats/cache.rs index 862f0ecd0de02..9dc30d8a18925 100644 --- a/src/librustdoc/formats/cache.rs +++ b/src/librustdoc/formats/cache.rs @@ -288,15 +288,7 @@ impl<'a, 'tcx> DocFolder for CacheBuilder<'a, 'tcx> { // for where the type was defined. On the other // hand, `paths` always has the right // information if present. - Some(&( - ref fqp, - ItemType::Trait - | ItemType::Struct - | ItemType::Union - | ItemType::Enum - | ItemType::Typedef, - )) => Some(&fqp[..fqp.len() - 1]), - Some(..) => Some(&*self.cache.stack), + Some(&(ref fqp, _)) => Some(&fqp[..fqp.len() - 1]), None => None, }; ((Some(*last), path), true) diff --git a/src/test/rustdoc-js/foreign-type-path.js b/src/test/rustdoc-js/foreign-type-path.js new file mode 100644 index 0000000000000..334761badcab1 --- /dev/null +++ b/src/test/rustdoc-js/foreign-type-path.js @@ -0,0 +1,9 @@ +const QUERY = 'MyForeignType::my_method'; + +const EXPECTED = { + 'others': [ + // Test case for https://github.com/rust-lang/rust/pull/96887#pullrequestreview-967154358 + // Validates that the parent path for a foreign type method is correct. + { 'path': 'foreign_type_path::aaaaaaa::MyForeignType', 'name': 'my_method' }, + ], +}; diff --git a/src/test/rustdoc-js/foreign-type-path.rs b/src/test/rustdoc-js/foreign-type-path.rs new file mode 100644 index 0000000000000..83400104ea77e --- /dev/null +++ b/src/test/rustdoc-js/foreign-type-path.rs @@ -0,0 +1,13 @@ +#![feature(extern_types)] + +pub mod aaaaaaa { + + extern { + pub type MyForeignType; + } + + impl MyForeignType { + pub fn my_method() {} + } + +} From e2dc3967fae1afb42614854a600c7e746d891bb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Kr=C3=BCger?= Date: Tue, 10 May 2022 20:42:45 +0200 Subject: [PATCH 9/9] simplify length count --- compiler/rustc_mir_transform/src/coverage/spans.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/rustc_mir_transform/src/coverage/spans.rs b/compiler/rustc_mir_transform/src/coverage/spans.rs index 5b7b343949c02..512d4daf3436b 100644 --- a/compiler/rustc_mir_transform/src/coverage/spans.rs +++ b/compiler/rustc_mir_transform/src/coverage/spans.rs @@ -485,7 +485,7 @@ impl<'a, 'tcx> CoverageSpans<'a, 'tcx> { }) { let merged_prefix_len = self.curr_original_span.lo() - self.curr().span.lo(); let after_macro_bang = - merged_prefix_len + BytePos(visible_macro.as_str().bytes().count() as u32 + 1); + merged_prefix_len + BytePos(visible_macro.as_str().len() as u32 + 1); let mut macro_name_cov = self.curr().clone(); self.curr_mut().span = self.curr().span.with_lo(self.curr().span.lo() + after_macro_bang);