Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rollup of 6 pull requests #95084

Closed
wants to merge 22 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
c589d65
Add test and discussed fix
lyinch Feb 17, 2022
17d39d6
Renamae test
lyinch Feb 17, 2022
f3ef98f
Use correct clock enum value
lyinch Feb 17, 2022
88f0c0d
Use correct clock enum value
lyinch Feb 17, 2022
d55e299
Add typedef for clock_id
lyinch Feb 17, 2022
e565c33
Use unix implementation of Instant for macos aarch64
lyinch Feb 17, 2022
abaaa9a
Fix formatting issue
lyinch Feb 17, 2022
4a29682
Change test to run on all platformsms instead of only macos aarch64
lyinch Feb 17, 2022
283ccc9
Bump libc version and use CLOCK_UPTIME_RAW constant
lyinch Feb 19, 2022
7ef74bc
Let `try_collect` take advantage of `try_fold` overrides
scottmcm Feb 18, 2022
4e3dbb3
Add test for >65535 hashes in lexing raw string
GrishaVar Mar 16, 2022
ba611d5
Derive Eq for std::cmp::Ordering, instead of using manual impl.
zachs18 Mar 16, 2022
b13b495
Add test for StructuralEq for std::cmp::Ordering.
zachs18 Mar 16, 2022
1ddbae3
Compare installed browser-ui-test version to the one used in CI
GuillaumeGomez Mar 11, 2022
c8158e9
Run rustdoc GUI tests when browser-ui-test version is updated
GuillaumeGomez Mar 18, 2022
05e9fcb
Re-enable parallel debuginfo tests
tromey Mar 18, 2022
b888873
Rollup merge of #94100 - lyinch:issue-91417-fix, r=yaahc
Dylan-DPC Mar 18, 2022
a62cf66
Rollup merge of #94115 - scottmcm:iter-process-by-ref, r=yaahc
Dylan-DPC Mar 18, 2022
de6c170
Rollup merge of #94848 - GuillaumeGomez:browser-ui-test-version, r=Ma…
Dylan-DPC Mar 18, 2022
fc234d3
Rollup merge of #94993 - GrishaVar:too-many-hashes-test, r=Dylan-DPC
Dylan-DPC Mar 18, 2022
0ffaf19
Rollup merge of #95017 - zachs18:cmp_ordering_derive_eq, r=Dylan-DPC
Dylan-DPC Mar 18, 2022
69e8ffc
Rollup merge of #95072 - tromey:parallel-debug-tests, r=tmiasko
Dylan-DPC Mar 18, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1965,9 +1965,9 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"

[[package]]
name = "libc"
version = "0.2.116"
version = "0.2.119"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "565dbd88872dbe4cc8a46e527f26483c1d1f7afa6b884a3bd6cd893d4f98da74"
checksum = "1bf2e165bb3457c8e098ea76f3e3bc9db55f87aa90d52d0e6be741470916aaa4"
dependencies = [
"rustc-std-workspace-core",
]
Expand Down
17 changes: 17 additions & 0 deletions compiler/rustc_lexer/src/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,23 @@ fn test_unterminated_no_pound() {
);
}

#[test]
fn test_too_many_hashes() {
let max_count = u16::MAX;
let mut hashes: String = "#".repeat(max_count.into());

// Valid number of hashes (65535 = 2^16 - 1), but invalid string.
check_raw_str(&hashes, max_count, Some(RawStrError::InvalidStarter { bad_char: '\u{0}' }));

// One more hash sign (65536 = 2^16) becomes too many.
hashes.push('#');
check_raw_str(
&hashes,
0,
Some(RawStrError::TooManyDelimiters { found: usize::from(max_count) + 1 }),
);
}

#[test]
fn test_valid_shebang() {
// https://github.com/rust-lang/rust/issues/70528
Expand Down
5 changes: 1 addition & 4 deletions library/core/src/cmp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ pub struct AssertParamIsEq<T: Eq + ?Sized> {
/// let result = 2.cmp(&1);
/// assert_eq!(Ordering::Greater, result);
/// ```
#[derive(Clone, Copy, PartialEq, Debug, Hash)]
#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash)]
#[stable(feature = "rust1", since = "1.0.0")]
#[repr(i8)]
pub enum Ordering {
Expand Down Expand Up @@ -861,9 +861,6 @@ pub macro Ord($item:item) {
/* compiler built-in */
}

#[stable(feature = "rust1", since = "1.0.0")]
impl Eq for Ordering {}

#[stable(feature = "rust1", since = "1.0.0")]
impl Ord for Ordering {
#[inline]
Expand Down
42 changes: 42 additions & 0 deletions library/core/src/iter/adapters/by_ref_sized.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
use crate::ops::Try;

/// Like `Iterator::by_ref`, but requiring `Sized` so it can forward generics.
///
/// Ideally this will no longer be required, eventually, but as can be seen in
/// the benchmarks (as of Feb 2022 at least) `by_ref` can have performance cost.
pub(crate) struct ByRefSized<'a, I>(pub &'a mut I);

impl<I: Iterator> Iterator for ByRefSized<'_, I> {
type Item = I::Item;

fn next(&mut self) -> Option<Self::Item> {
self.0.next()
}

fn size_hint(&self) -> (usize, Option<usize>) {
self.0.size_hint()
}

fn advance_by(&mut self, n: usize) -> Result<(), usize> {
self.0.advance_by(n)
}

fn nth(&mut self, n: usize) -> Option<Self::Item> {
self.0.nth(n)
}

fn fold<B, F>(self, init: B, f: F) -> B
where
F: FnMut(B, Self::Item) -> B,
{
self.0.fold(init, f)
}

fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
where
F: FnMut(B, Self::Item) -> R,
R: Try<Output = B>,
{
self.0.try_fold(init, f)
}
}
3 changes: 3 additions & 0 deletions library/core/src/iter/adapters/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use crate::iter::{InPlaceIterable, Iterator};
use crate::ops::{ChangeOutputType, ControlFlow, FromResidual, NeverShortCircuit, Residual, Try};

mod by_ref_sized;
mod chain;
mod cloned;
mod copied;
Expand Down Expand Up @@ -31,6 +32,8 @@ pub use self::{
scan::Scan, skip::Skip, skip_while::SkipWhile, take::Take, take_while::TakeWhile, zip::Zip,
};

pub(crate) use self::by_ref_sized::ByRefSized;

#[stable(feature = "iter_cloned", since = "1.1.0")]
pub use self::cloned::Cloned;

Expand Down
2 changes: 1 addition & 1 deletion library/core/src/iter/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -417,7 +417,7 @@ pub use self::adapters::{
#[unstable(feature = "iter_intersperse", reason = "recently added", issue = "79524")]
pub use self::adapters::{Intersperse, IntersperseWith};

pub(crate) use self::adapters::try_process;
pub(crate) use self::adapters::{try_process, ByRefSized};

mod adapters;
mod range;
Expand Down
3 changes: 2 additions & 1 deletion library/core/src/iter/traits/iterator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use crate::cmp::{self, Ordering};
use crate::ops::{ChangeOutputType, ControlFlow, FromResidual, Residual, Try};

use super::super::try_process;
use super::super::ByRefSized;
use super::super::TrustedRandomAccessNoCoerce;
use super::super::{Chain, Cloned, Copied, Cycle, Enumerate, Filter, FilterMap, Fuse};
use super::super::{FlatMap, Flatten};
Expand Down Expand Up @@ -1861,7 +1862,7 @@ pub trait Iterator {
<<Self as Iterator>::Item as Try>::Residual: Residual<B>,
B: FromIterator<<Self::Item as Try>::Output>,
{
try_process(self, |i| i.collect())
try_process(ByRefSized(self), |i| i.collect())
}

/// Collects all the items from an iterator into a collection.
Expand Down
13 changes: 13 additions & 0 deletions library/core/tests/cmp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,19 @@ fn ordering_const() {
assert_eq!(THEN, Greater);
}

#[test]
fn ordering_structural_eq() {
// test that consts of type `Ordering` are usable in patterns

const ORDERING: Ordering = Greater;

const REVERSE: Ordering = ORDERING.reverse();
match Ordering::Less {
REVERSE => {}
_ => unreachable!(),
};
}

#[test]
fn cmp_default() {
// Test default methods in PartialOrd and PartialEq
Expand Down
24 changes: 24 additions & 0 deletions library/core/tests/iter/traits/iterator.rs
Original file line number Diff line number Diff line change
Expand Up @@ -551,6 +551,30 @@ fn test_collect_into() {
assert!(a == b);
}

#[test]
fn iter_try_collect_uses_try_fold_not_next() {
// This makes sure it picks up optimizations, and doesn't use the `&mut I` impl.
struct PanicOnNext<I>(I);
impl<I: Iterator> Iterator for PanicOnNext<I> {
type Item = I::Item;
fn next(&mut self) -> Option<Self::Item> {
panic!("Iterator::next should not be called!")
}
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
where
Self: Sized,
F: FnMut(B, Self::Item) -> R,
R: std::ops::Try<Output = B>,
{
self.0.try_fold(init, f)
}
}

let it = (0..10).map(Some);
let _ = PanicOnNext(it).try_collect::<Vec<_>>();
// validation is just that it didn't panic.
}

// just tests by whether or not this compiles
fn _empty_impl_all_auto_traits<T>() {
use std::panic::{RefUnwindSafe, UnwindSafe};
Expand Down
2 changes: 1 addition & 1 deletion library/std/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ cfg-if = { version = "0.1.8", features = ['rustc-dep-of-std'] }
panic_unwind = { path = "../panic_unwind", optional = true }
panic_abort = { path = "../panic_abort" }
core = { path = "../core" }
libc = { version = "0.2.116", default-features = false, features = ['rustc-dep-of-std'] }
libc = { version = "0.2.119", default-features = false, features = ['rustc-dep-of-std'] }
compiler_builtins = { version = "0.1.69" }
profiler_builtins = { path = "../profiler_builtins", optional = true }
unwind = { path = "../unwind" }
Expand Down
14 changes: 10 additions & 4 deletions library/std/src/sys/unix/time.rs
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ impl Hash for Timespec {
}
}

#[cfg(any(target_os = "macos", target_os = "ios"))]
#[cfg(any(all(target_os = "macos", not(target_arch = "aarch64")), target_os = "ios"))]
mod inner {
use crate::fmt;
use crate::sync::atomic::{AtomicU64, Ordering};
Expand Down Expand Up @@ -263,7 +263,7 @@ mod inner {
}
}

#[cfg(not(any(target_os = "macos", target_os = "ios")))]
#[cfg(not(any(all(target_os = "macos", not(target_arch = "aarch64")), target_os = "ios")))]
mod inner {
use crate::fmt;
use crate::sys::cvt;
Expand All @@ -285,7 +285,11 @@ mod inner {

impl Instant {
pub fn now() -> Instant {
Instant { t: now(libc::CLOCK_MONOTONIC) }
#[cfg(target_os = "macos")]
const clock_id: clock_t = libc::CLOCK_UPTIME_RAW;
#[cfg(not(target_os = "macos"))]
const clock_id: clock_t = libc::CLOCK_MONOTONIC;
Instant { t: now(clock_id) }
}

pub fn checked_sub_instant(&self, other: &Instant) -> Option<Duration> {
Expand Down Expand Up @@ -343,10 +347,12 @@ mod inner {
}
}

#[cfg(not(any(target_os = "dragonfly", target_os = "espidf")))]
#[cfg(not(any(target_os = "dragonfly", target_os = "espidf", target_os = "macos")))]
pub type clock_t = libc::c_int;
#[cfg(any(target_os = "dragonfly", target_os = "espidf"))]
pub type clock_t = libc::c_ulong;
#[cfg(target_os = "macos")]
pub type clock_t = libc::clockid_t;

fn now(clock: clock_t) -> Timespec {
let mut t = Timespec { t: libc::timespec { tv_sec: 0, tv_nsec: 0 } };
Expand Down
8 changes: 8 additions & 0 deletions library/std/src/time/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,14 @@ macro_rules! assert_almost_eq {
}};
}

#[test]
fn macos_resolution_regression() {
let t0 = Instant::now();
let t1 = t0 + Duration::from_nanos(50);
let d = t1 - t0;
assert_eq!(t0 + d, t1);
}

#[test]
fn instant_monotonic() {
let a = Instant::now();
Expand Down
58 changes: 41 additions & 17 deletions src/bootstrap/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -836,22 +836,39 @@ impl Step for RustdocJSNotStd {
}
}

fn check_if_browser_ui_test_is_installed_global(npm: &Path, global: bool) -> bool {
fn get_browser_ui_test_version_inner(npm: &Path, global: bool) -> Option<String> {
let mut command = Command::new(&npm);
command.arg("list").arg("--depth=0");
command.arg("list").arg("--parseable").arg("--long").arg("--depth=0");
if global {
command.arg("--global");
}
let lines = command
.output()
.map(|output| String::from_utf8_lossy(&output.stdout).into_owned())
.unwrap_or(String::new());
lines.contains(&" browser-ui-test@")
lines.lines().find_map(|l| l.split(":browser-ui-test@").skip(1).next()).map(|v| v.to_owned())
}

fn check_if_browser_ui_test_is_installed(npm: &Path) -> bool {
check_if_browser_ui_test_is_installed_global(npm, false)
|| check_if_browser_ui_test_is_installed_global(npm, true)
fn get_browser_ui_test_version(npm: &Path) -> Option<String> {
get_browser_ui_test_version_inner(npm, false)
.or_else(|| get_browser_ui_test_version_inner(npm, true))
}

fn compare_browser_ui_test_version(installed_version: &str, src: &Path) {
match fs::read_to_string(
src.join("src/ci/docker/host-x86_64/x86_64-gnu-tools/browser-ui-test.version"),
) {
Ok(v) => {
if v.trim() != installed_version {
eprintln!(
"⚠️ Installed version of browser-ui-test (`{}`) is different than the \
one used in the CI (`{}`)",
installed_version, v
);
}
}
Err(e) => eprintln!("Couldn't find the CI browser-ui-test version: {:?}", e),
}
}

#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
Expand All @@ -874,7 +891,7 @@ impl Step for RustdocGUI {
.config
.npm
.as_ref()
.map(|p| check_if_browser_ui_test_is_installed(p))
.map(|p| get_browser_ui_test_version(p).is_some())
.unwrap_or(false)
}))
}
Expand All @@ -892,16 +909,23 @@ impl Step for RustdocGUI {

// The goal here is to check if the necessary packages are installed, and if not, we
// panic.
if !check_if_browser_ui_test_is_installed(&npm) {
eprintln!(
"error: rustdoc-gui test suite cannot be run because npm `browser-ui-test` \
dependency is missing",
);
eprintln!(
"If you want to install the `{0}` dependency, run `npm install {0}`",
"browser-ui-test",
);
panic!("Cannot run rustdoc-gui tests");
match get_browser_ui_test_version(&npm) {
Some(version) => {
// We also check the version currently used in CI and emit a warning if it's not the
// same one.
compare_browser_ui_test_version(&version, &builder.build.src);
}
None => {
eprintln!(
"error: rustdoc-gui test suite cannot be run because npm `browser-ui-test` \
dependency is missing",
);
eprintln!(
"If you want to install the `{0}` dependency, run `npm install {0}`",
"browser-ui-test",
);
panic!("Cannot run rustdoc-gui tests");
}
}

let out_dir = builder.test_out(self.target).join("rustdoc-gui");
Expand Down
10 changes: 8 additions & 2 deletions src/ci/docker/host-x86_64/x86_64-gnu-tools/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,20 @@ RUN /scripts/cmake.sh
COPY host-x86_64/x86_64-gnu-tools/checktools.sh /tmp/

RUN curl -sL https://nodejs.org/dist/v14.4.0/node-v14.4.0-linux-x64.tar.xz | tar -xJ
ENV PATH="/node-v14.4.0-linux-x64/bin:${PATH}"
ENV NODE_FOLDER=/node-v14.4.0-linux-x64/bin
ENV PATH="$NODE_FOLDER:${PATH}"

COPY host-x86_64/x86_64-gnu-tools/browser-ui-test.version /tmp/

# For now, we need to use `--unsafe-perm=true` to go around an issue when npm tries
# to create a new folder. For reference:
# https://github.com/puppeteer/puppeteer/issues/375
#
# We also specify the version in case we need to update it to go around cache limitations.
RUN npm install -g browser-ui-test@0.8.3 --unsafe-perm=true
#
# The `browser-ui-test.version` file is also used by bootstrap to emit warnings in case
# the local version of the package is different than the one used by the CI.
RUN npm install -g browser-ui-test@$(head -n 1 /tmp/browser-ui-test.version) --unsafe-perm=true

ENV RUST_CONFIGURE_ARGS \
--build=x86_64-unknown-linux-gnu \
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0.8.3
1 change: 1 addition & 0 deletions src/ci/scripts/should-skip-this.sh
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ if [[ -n "${CI_ONLY_WHEN_SUBMODULES_CHANGED-}" ]]; then
src/test/rustdoc-gui \
src/librustdoc \
src/ci/docker/host-x86_64/x86_64-gnu-tools/Dockerfile \
src/ci/docker/host-x86_64/x86_64-gnu-tools/browser-ui-test.version \
src/tools/rustdoc-gui); then
# There was a change in either rustdoc or in its GUI tests.
echo "Rustdoc was updated"
Expand Down
5 changes: 0 additions & 5 deletions src/tools/compiletest/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -487,11 +487,6 @@ fn configure_lldb(config: &Config) -> Option<Config> {
return None;
}

// Some older versions of LLDB seem to have problems with multiple
// instances running in parallel, so only run one test thread at a
// time.
env::set_var("RUST_TEST_THREADS", "1");

Some(Config { debugger: Some(Debugger::Lldb), ..config.clone() })
}

Expand Down