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
This commit is contained in:
commit
03c8ffaacb
18 changed files with 354 additions and 148 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
45
src/test/ui/async-await/drop-track-field-assign-nonsend.rs
Normal file
45
src/test/ui/async-await/drop-track-field-assign-nonsend.rs
Normal file
|
|
@ -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
|
||||
}
|
||||
|
|
@ -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
|
||||
|
||||
44
src/test/ui/async-await/drop-track-field-assign.rs
Normal file
44
src/test/ui/async-await/drop-track-field-assign.rs
Normal file
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue