Skip to content

Commit

Permalink
Auto merge of #97063 - Dylan-DPC:rollup-u5el7hb, r=Dylan-DPC
Browse files Browse the repository at this point in the history
Rollup of 4 pull requests

Successful merges:

 - #96947 (Add rustc_nonnull_optimization_guaranteed to Owned/Borrowed Fd/Socket)
 - #97021 (Added note in documentation)
 - #97042 (Add new eslint rule about brace style)
 - #97060 (Fix use of SetHandleInformation on UWP)

Failed merges:

r? `@ghost`
`@rustbot` modify labels: rollup
  • Loading branch information
bors committed May 15, 2022
2 parents 0f202d2 + d56c59e commit 29e972d
Show file tree
Hide file tree
Showing 14 changed files with 123 additions and 35 deletions.
2 changes: 2 additions & 0 deletions library/std/src/os/fd/owned.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ use crate::sys_common::{AsInner, FromInner, IntoInner};
// 32-bit c_int. Below is -2, in two's complement, but that only works out
// because c_int is 32 bits.
#[rustc_layout_scalar_valid_range_end(0xFF_FF_FF_FE)]
#[rustc_nonnull_optimization_guaranteed]
#[unstable(feature = "io_safety", issue = "87074")]
pub struct BorrowedFd<'fd> {
fd: RawFd,
Expand All @@ -52,6 +53,7 @@ pub struct BorrowedFd<'fd> {
// 32-bit c_int. Below is -2, in two's complement, but that only works out
// because c_int is 32 bits.
#[rustc_layout_scalar_valid_range_end(0xFF_FF_FF_FE)]
#[rustc_nonnull_optimization_guaranteed]
#[unstable(feature = "io_safety", issue = "87074")]
pub struct OwnedFd {
fd: RawFd,
Expand Down
19 changes: 19 additions & 0 deletions library/std/src/os/fd/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,22 @@ fn test_fd() {
assert_eq!(stdin_as_file.as_fd().as_raw_fd(), raw_fd);
assert_eq!(Into::<OwnedFd>::into(stdin_as_file).into_raw_fd(), raw_fd);
}

#[cfg(any(unix, target_os = "wasi"))]
#[test]
fn test_niche_optimizations() {
use crate::mem::size_of;
#[cfg(unix)]
use crate::os::unix::io::{BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};
#[cfg(target_os = "wasi")]
use crate::os::wasi::io::{BorrowedFd, FromRawFd, IntoRawFd, OwnedFd, RawFd};

assert_eq!(size_of::<Option<OwnedFd>>(), size_of::<RawFd>());
assert_eq!(size_of::<Option<BorrowedFd<'static>>>(), size_of::<RawFd>());
unsafe {
assert_eq!(OwnedFd::from_raw_fd(RawFd::MIN).into_raw_fd(), RawFd::MIN);
assert_eq!(OwnedFd::from_raw_fd(RawFd::MAX).into_raw_fd(), RawFd::MAX);
assert_eq!(Some(OwnedFd::from_raw_fd(RawFd::MIN)).unwrap().into_raw_fd(), RawFd::MIN);
assert_eq!(Some(OwnedFd::from_raw_fd(RawFd::MAX)).unwrap().into_raw_fd(), RawFd::MAX);
}
}
1 change: 1 addition & 0 deletions library/std/src/os/windows/io/handle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ impl OwnedHandle {
}

/// Allow child processes to inherit the handle.
#[cfg(not(target_vendor = "uwp"))]
pub(crate) fn set_inheritable(&self) -> io::Result<()> {
cvt(unsafe {
c::SetHandleInformation(
Expand Down
3 changes: 3 additions & 0 deletions library/std/src/os/windows/io/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -54,3 +54,6 @@ pub use handle::*;
pub use raw::*;
#[unstable(feature = "io_safety", issue = "87074")]
pub use socket::*;

#[cfg(test)]
mod tests;
3 changes: 3 additions & 0 deletions library/std/src/os/windows/io/socket.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ use crate::mem;
use crate::mem::forget;
use crate::sys;
use crate::sys::c;
#[cfg(not(target_vendor = "uwp"))]
use crate::sys::cvt;

/// A borrowed socket.
Expand All @@ -34,6 +35,7 @@ use crate::sys::cvt;
target_pointer_width = "64",
rustc_layout_scalar_valid_range_end(0xFF_FF_FF_FF_FF_FF_FF_FE)
)]
#[rustc_nonnull_optimization_guaranteed]
#[unstable(feature = "io_safety", issue = "87074")]
pub struct BorrowedSocket<'socket> {
socket: RawSocket,
Expand All @@ -56,6 +58,7 @@ pub struct BorrowedSocket<'socket> {
target_pointer_width = "64",
rustc_layout_scalar_valid_range_end(0xFF_FF_FF_FF_FF_FF_FF_FE)
)]
#[rustc_nonnull_optimization_guaranteed]
#[unstable(feature = "io_safety", issue = "87074")]
pub struct OwnedSocket {
socket: RawSocket,
Expand Down
21 changes: 21 additions & 0 deletions library/std/src/os/windows/io/tests.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#[test]
fn test_niche_optimizations_socket() {
use crate::mem::size_of;
use crate::os::windows::io::{
BorrowedSocket, FromRawSocket, IntoRawSocket, OwnedSocket, RawSocket,
};

assert_eq!(size_of::<Option<OwnedSocket>>(), size_of::<RawSocket>());
assert_eq!(size_of::<Option<BorrowedSocket<'static>>>(), size_of::<RawSocket>(),);
unsafe {
#[cfg(target_pointer_width = "32")]
let (min, max) = (i32::MIN as u32, i32::MAX as u32);
#[cfg(target_pointer_width = "64")]
let (min, max) = (i64::MIN as u64, i64::MAX as u64);

assert_eq!(OwnedSocket::from_raw_socket(min).into_raw_socket(), min);
assert_eq!(OwnedSocket::from_raw_socket(max).into_raw_socket(), max);
assert_eq!(Some(OwnedSocket::from_raw_socket(min)).unwrap().into_raw_socket(), min);
assert_eq!(Some(OwnedSocket::from_raw_socket(max)).unwrap().into_raw_socket(), max);
}
}
1 change: 1 addition & 0 deletions library/std/src/sys/windows/handle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,7 @@ impl Handle {
Ok(Self(self.0.duplicate(access, inherit, options)?))
}

#[cfg(not(target_vendor = "uwp"))]
pub(crate) fn set_inheritable(&self) -> io::Result<()> {
self.0.set_inheritable()
}
Expand Down
13 changes: 12 additions & 1 deletion library/std/src/sys/windows/pipe.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,21 @@ impl Pipes {
} else {
let (ours, theirs) = if ours_readable { (read, write) } else { (write, read) };
let ours = Handle::from_raw_handle(ours);
#[cfg(not(target_vendor = "uwp"))]
let theirs = Handle::from_raw_handle(theirs);
#[cfg(target_vendor = "uwp")]
let mut theirs = Handle::from_raw_handle(theirs);

if their_handle_inheritable {
theirs.set_inheritable()?;
#[cfg(not(target_vendor = "uwp"))]
{
theirs.set_inheritable()?;
}

#[cfg(target_vendor = "uwp")]
{
theirs = theirs.duplicate(0, true, c::DUPLICATE_SAME_ACCESS)?;
}
}

Ok(Pipes { ours: AnonPipe::Sync(ours), theirs: AnonPipe::Sync(theirs) })
Expand Down
5 changes: 4 additions & 1 deletion src/doc/unstable-book/src/compiler-flags/sanitizer.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,10 @@ This feature allows for use of one of following sanitizers:

To enable a sanitizer compile with `-Zsanitizer=address`,`-Zsanitizer=cfi`,
`-Zsanitizer=hwaddress`, `-Zsanitizer=leak`, `-Zsanitizer=memory`,
`-Zsanitizer=memtag`, or `-Zsanitizer=thread`.
`-Zsanitizer=memtag`, or `-Zsanitizer=thread`. You might also need the `--target` and `build-std` flags. Example:
```shell
$ RUSTFLAGS=-Zsanitizer=address cargo build -Zbuild-std --target x86_64-unknown-linux-gnu
```

# AddressSanitizer

Expand Down
5 changes: 5 additions & 0 deletions src/librustdoc/html/static/.eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,10 @@ module.exports = {
"no-var": ["error"],
"prefer-const": ["error"],
"prefer-arrow-callback": ["error"],
"brace-style": [
"error",
"1tbs",
{ "allowSingleLine": false }
],
}
};
4 changes: 2 additions & 2 deletions src/librustdoc/html/static/js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -709,8 +709,8 @@ function loadCss(cssFileName) {
onEachLazy(document.getElementsByClassName("rustdoc-toggle"), e => {
if (e.parentNode.id !== "implementations-list" ||
(!hasClass(e, "implementors-toggle") &&
!hasClass(e, "type-contents-toggle")))
{
!hasClass(e, "type-contents-toggle"))
) {
e.open = false;
}
});
Expand Down
4 changes: 3 additions & 1 deletion src/librustdoc/html/static/js/scrape-examples.js
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,9 @@
// visible. This is necessary since updateScrapedExample calls scrollToLoc which
// depends on offsetHeight, a property that requires an element to be visible to
// compute correctly.
setTimeout(() => { onEachLazy(moreExamples, updateScrapedExample); });
setTimeout(() => {
onEachLazy(moreExamples, updateScrapedExample);
});
}, {once: true});
});
})();
73 changes: 45 additions & 28 deletions src/librustdoc/html/static/js/search.js
Original file line number Diff line number Diff line change
Expand Up @@ -320,8 +320,8 @@ window.initSearch = rawSearchIndex => {
if (foundExclamation) {
throw new Error("Cannot have more than one `!` in an ident");
} else if (parserState.pos + 1 < parserState.length &&
isIdentCharacter(parserState.userQuery[parserState.pos + 1]))
{
isIdentCharacter(parserState.userQuery[parserState.pos + 1])
) {
throw new Error("`!` can only be at the end of an ident");
}
foundExclamation = true;
Expand All @@ -330,12 +330,10 @@ window.initSearch = rawSearchIndex => {
} else if (
isStopCharacter(c) ||
isSpecialStartCharacter(c) ||
isSeparatorCharacter(c))
{
isSeparatorCharacter(c)
) {
break;
}
// If we allow paths ("str::string" for example).
else if (c === ":") {
} else if (c === ":") { // If we allow paths ("str::string" for example).
if (!isPathStart(parserState)) {
break;
}
Expand Down Expand Up @@ -372,8 +370,8 @@ window.initSearch = rawSearchIndex => {
end = getIdentEndPosition(parserState);
}
if (parserState.pos < parserState.length &&
parserState.userQuery[parserState.pos] === "<")
{
parserState.userQuery[parserState.pos] === "<"
) {
if (isInGenerics) {
throw new Error("Unexpected `<` after `<`");
} else if (start >= end) {
Expand Down Expand Up @@ -592,8 +590,8 @@ window.initSearch = rawSearchIndex => {

if (elem &&
elem.value !== "All crates" &&
hasOwnPropertyRustdoc(rawSearchIndex, elem.value))
{
hasOwnPropertyRustdoc(rawSearchIndex, elem.value)
) {
return elem.value;
}
return null;
Expand Down Expand Up @@ -786,37 +784,51 @@ window.initSearch = rawSearchIndex => {
// sort by exact match with regard to the last word (mismatch goes later)
a = (aaa.word !== userQuery);
b = (bbb.word !== userQuery);
if (a !== b) { return a - b; }
if (a !== b) {
return a - b;
}

// Sort by non levenshtein results and then levenshtein results by the distance
// (less changes required to match means higher rankings)
a = (aaa.lev);
b = (bbb.lev);
if (a !== b) { return a - b; }
if (a !== b) {
return a - b;
}

// sort by crate (non-current crate goes later)
a = (aaa.item.crate !== window.currentCrate);
b = (bbb.item.crate !== window.currentCrate);
if (a !== b) { return a - b; }
if (a !== b) {
return a - b;
}

// sort by item name length (longer goes later)
a = aaa.word.length;
b = bbb.word.length;
if (a !== b) { return a - b; }
if (a !== b) {
return a - b;
}

// sort by item name (lexicographically larger goes later)
a = aaa.word;
b = bbb.word;
if (a !== b) { return (a > b ? +1 : -1); }
if (a !== b) {
return (a > b ? +1 : -1);
}

// sort by index of keyword in item name (no literal occurrence goes later)
a = (aaa.index < 0);
b = (bbb.index < 0);
if (a !== b) { return a - b; }
if (a !== b) {
return a - b;
}
// (later literal occurrence, if any, goes later)
a = aaa.index;
b = bbb.index;
if (a !== b) { return a - b; }
if (a !== b) {
return a - b;
}

// special precedence for primitive and keyword pages
if ((aaa.item.ty === TY_PRIMITIVE && bbb.item.ty !== TY_KEYWORD) ||
Expand All @@ -831,17 +843,23 @@ window.initSearch = rawSearchIndex => {
// sort by description (no description goes later)
a = (aaa.item.desc === "");
b = (bbb.item.desc === "");
if (a !== b) { return a - b; }
if (a !== b) {
return a - b;
}

// sort by type (later occurrence in `itemTypes` goes later)
a = aaa.item.ty;
b = bbb.item.ty;
if (a !== b) { return a - b; }
if (a !== b) {
return a - b;
}

// sort by path (lexicographically larger goes later)
a = aaa.item.path;
b = bbb.item.path;
if (a !== b) { return (a > b ? +1 : -1); }
if (a !== b) {
return (a > b ? +1 : -1);
}

// que sera, sera
return 0;
Expand Down Expand Up @@ -1315,16 +1333,15 @@ window.initSearch = rawSearchIndex => {
}

if (searchWord.indexOf(elem.pathLast) > -1 ||
row.normalizedName.indexOf(elem.pathLast) > -1)
{
row.normalizedName.indexOf(elem.pathLast) > -1
) {
// filter type: ... queries
if (!results_others[fullId] !== undefined) {
index = row.normalizedName.indexOf(elem.pathLast);
}
}
lev = levenshtein(searchWord, elem.pathLast);
if (lev > 0 && elem.pathLast.length > 2 && searchWord.indexOf(elem.pathLast) > -1)
{
if (lev > 0 && elem.pathLast.length > 2 && searchWord.indexOf(elem.pathLast) > -1) {
if (elem.pathLast.length < 6) {
lev = 1;
} else {
Expand Down Expand Up @@ -1670,8 +1687,8 @@ window.initSearch = rawSearchIndex => {
// By default, the search DOM element is "empty" (meaning it has no children not
// text content). Once a search has been run, it won't be empty, even if you press
// ESC or empty the search input (which also "cancels" the search).
&& (!search.firstChild || search.firstChild.innerText !== searchState.loadingText)))
{
&& (!search.firstChild || search.firstChild.innerText !== searchState.loadingText))
) {
const elem = document.createElement("a");
elem.href = results.others[0].href;
removeClass(elem, "active");
Expand Down Expand Up @@ -1766,7 +1783,7 @@ window.initSearch = rawSearchIndex => {
let i = 0;
for (const elem of elems) {
const j = i;
elem.onclick = () => { printTab(j); };
elem.onclick = () => printTab(j);
searchState.focusedByTab.push(null);
i += 1;
}
Expand Down
4 changes: 2 additions & 2 deletions src/librustdoc/html/static/js/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -254,8 +254,8 @@
function blurHandler(event) {
const settingsButton = getSettingsButton();
if (!elemIsInParent(document.activeElement, settingsButton) &&
!elemIsInParent(event.relatedTarget, settingsButton))
{
!elemIsInParent(event.relatedTarget, settingsButton)
) {
window.hideSettings();
}
}
Expand Down

0 comments on commit 29e972d

Please sign in to comment.