diff options
| author | bors <bors@rust-lang.org> | 2022-02-25 08:40:34 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-02-25 08:40:34 +0000 |
| commit | 03c8ffaacb040a8753ef8e1accea701bc9f5be85 (patch) | |
| tree | 243ffcf7568eceb6515c48a28f5d78b8a3a05038 /src | |
| parent | ece55d416e65256e4da274988651c20e5d5cb4ea (diff) | |
| parent | cff3472ef1d21ca2ed5be4c8f6444df3967c61a8 (diff) | |
| download | rust-03c8ffaacb040a8753ef8e1accea701bc9f5be85.tar.gz rust-03c8ffaacb040a8753ef8e1accea701bc9f5be85.zip | |
Auto merge of #94350 - matthiaskrgr:rollup-eesfiyr, r=matthiaskrgr
Rollup of 6 pull requests Successful merges: - #92714 (Provide ignore message in the result of test) - #93273 (Always check cg_llvm with ./x.py check) - #94068 (Consider mutations as borrows in generator drop tracking) - #94184 (BTree: simplify test code) - #94297 (update const_generics_defaults release notes) - #94341 (Remove a duplicate space) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'src')
| -rw-r--r-- | src/bootstrap/compile.rs | 2 | ||||
| -rw-r--r-- | src/bootstrap/lib.rs | 5 | ||||
| -rw-r--r-- | src/librustdoc/doctest.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/async-await/drop-track-field-assign-nonsend.rs | 45 | ||||
| -rw-r--r-- | src/test/ui/async-await/drop-track-field-assign-nonsend.stderr | 25 | ||||
| -rw-r--r-- | src/test/ui/async-await/drop-track-field-assign.rs | 44 | ||||
| -rw-r--r-- | src/tools/compiletest/src/header.rs | 4 |
7 files changed, 124 insertions, 3 deletions
diff --git a/src/bootstrap/compile.rs b/src/bootstrap/compile.rs index 53226977fd8..b2805d93b70 100644 --- a/src/bootstrap/compile.rs +++ b/src/bootstrap/compile.rs @@ -648,7 +648,7 @@ impl Step for Rustc { pub fn rustc_cargo(builder: &Builder<'_>, cargo: &mut Cargo, target: TargetSelection) { cargo .arg("--features") - .arg(builder.rustc_features()) + .arg(builder.rustc_features(builder.kind)) .arg("--manifest-path") .arg(builder.src.join("compiler/rustc/Cargo.toml")); rustc_cargo_env(builder, cargo, target); diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs index 6f010cc9f8c..86339c8d7f8 100644 --- a/src/bootstrap/lib.rs +++ b/src/bootstrap/lib.rs @@ -119,6 +119,7 @@ use std::os::windows::fs::symlink_file; use build_helper::{mtime, output, run, run_suppressed, t, try_run, try_run_suppressed}; use filetime::FileTime; +use crate::builder::Kind; use crate::config::{LlvmLibunwind, TargetSelection}; use crate::util::{exe, libdir, CiEnv}; @@ -669,12 +670,12 @@ impl Build { } /// Gets the space-separated set of activated features for the compiler. - fn rustc_features(&self) -> String { + fn rustc_features(&self, kind: Kind) -> String { let mut features = String::new(); if self.config.jemalloc { features.push_str("jemalloc"); } - if self.config.llvm_enabled() { + if self.config.llvm_enabled() || kind == Kind::Check { features.push_str(" llvm"); } diff --git a/src/librustdoc/doctest.rs b/src/librustdoc/doctest.rs index a08732be1c5..dc9ce052cb5 100644 --- a/src/librustdoc/doctest.rs +++ b/src/librustdoc/doctest.rs @@ -946,6 +946,8 @@ impl Tester for Collector { Ignore::None => false, Ignore::Some(ref ignores) => ignores.iter().any(|s| target_str.contains(s)), }, + #[cfg(not(bootstrap))] + ignore_message: None, // compiler failures are test failures should_panic: test::ShouldPanic::No, compile_fail: config.compile_fail, diff --git a/src/test/ui/async-await/drop-track-field-assign-nonsend.rs b/src/test/ui/async-await/drop-track-field-assign-nonsend.rs new file mode 100644 index 00000000000..b6c0fda1521 --- /dev/null +++ b/src/test/ui/async-await/drop-track-field-assign-nonsend.rs @@ -0,0 +1,45 @@ +// Derived from an ICE found in tokio-xmpp during a crater run. +// edition:2021 +// compile-flags: -Zdrop-tracking + +#![allow(dead_code)] + +#[derive(Clone)] +struct InfoResult { + node: Option<std::rc::Rc<String>> +} + +struct Agent { + info_result: InfoResult +} + +impl Agent { + async fn handle(&mut self) { + let mut info = self.info_result.clone(); + info.node = None; + let element = parse_info(info); + let _ = send_element(element).await; + } +} + +struct Element { +} + +async fn send_element(_: Element) {} + +fn parse(_: &[u8]) -> Result<(), ()> { + Ok(()) +} + +fn parse_info(_: InfoResult) -> Element { + Element { } +} + +fn assert_send<T: Send>(_: T) {} + +fn main() { + let agent = Agent { info_result: InfoResult { node: None } }; + // FIXME: It would be nice for this to work. See #94067. + assert_send(agent.handle()); + //~^ cannot be sent between threads safely +} diff --git a/src/test/ui/async-await/drop-track-field-assign-nonsend.stderr b/src/test/ui/async-await/drop-track-field-assign-nonsend.stderr new file mode 100644 index 00000000000..d95483c8119 --- /dev/null +++ b/src/test/ui/async-await/drop-track-field-assign-nonsend.stderr @@ -0,0 +1,25 @@ +error: future cannot be sent between threads safely + --> $DIR/drop-track-field-assign-nonsend.rs:43:17 + | +LL | assert_send(agent.handle()); + | ^^^^^^^^^^^^^^ future returned by `handle` is not `Send` + | + = help: within `impl Future<Output = ()>`, the trait `Send` is not implemented for `Rc<String>` +note: future is not `Send` as this value is used across an await + --> $DIR/drop-track-field-assign-nonsend.rs:21:38 + | +LL | let mut info = self.info_result.clone(); + | -------- has type `InfoResult` which is not `Send` +... +LL | let _ = send_element(element).await; + | ^^^^^^ await occurs here, with `mut info` maybe used later +LL | } + | - `mut info` is later dropped here +note: required by a bound in `assert_send` + --> $DIR/drop-track-field-assign-nonsend.rs:38:19 + | +LL | fn assert_send<T: Send>(_: T) {} + | ^^^^ required by this bound in `assert_send` + +error: aborting due to previous error + diff --git a/src/test/ui/async-await/drop-track-field-assign.rs b/src/test/ui/async-await/drop-track-field-assign.rs new file mode 100644 index 00000000000..3a393cd164b --- /dev/null +++ b/src/test/ui/async-await/drop-track-field-assign.rs @@ -0,0 +1,44 @@ +// Derived from an ICE found in tokio-xmpp during a crater run. +// edition:2021 +// compile-flags: -Zdrop-tracking +// build-pass + +#![allow(dead_code)] + +#[derive(Clone)] +struct InfoResult { + node: Option<String> +} + +struct Agent { + info_result: InfoResult +} + +impl Agent { + async fn handle(&mut self) { + let mut info = self.info_result.clone(); + info.node = Some("bar".into()); + let element = parse_info(info); + let _ = send_element(element).await; + } +} + +struct Element { +} + +async fn send_element(_: Element) {} + +fn parse(_: &[u8]) -> Result<(), ()> { + Ok(()) +} + +fn parse_info(_: InfoResult) -> Element { + Element { } +} + +fn main() { + let mut agent = Agent { + info_result: InfoResult { node: None } + }; + let _ = agent.handle(); +} diff --git a/src/tools/compiletest/src/header.rs b/src/tools/compiletest/src/header.rs index 887d27fd6dc..2c2239f2b83 100644 --- a/src/tools/compiletest/src/header.rs +++ b/src/tools/compiletest/src/header.rs @@ -806,6 +806,8 @@ pub fn make_test_description<R: Read>( cfg: Option<&str>, ) -> test::TestDesc { let mut ignore = false; + #[cfg(not(bootstrap))] + let ignore_message: Option<String> = None; let mut should_fail = false; let rustc_has_profiler_support = env::var_os("RUSTC_PROFILER_SUPPORT").is_some(); @@ -877,6 +879,8 @@ pub fn make_test_description<R: Read>( test::TestDesc { name, ignore, + #[cfg(not(bootstrap))] + ignore_message, should_panic, compile_fail: false, no_run: false, |
