Auto merge of #113406 - matthiaskrgr:rollup-0rprs5k, r=matthiaskrgr
Rollup of 4 pull requests Successful merges: - #112295 (Fix the tests-listing-format-json test on Windows) - #113246 (fix compiletest crash) - #113395 (Dont ICE for `dyn* Trait: Trait` (built-in object) goals during selection in new trait solver) - #113402 (Diagnose unsorted CGUs.) r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
4b6749b21e
5 changed files with 21 additions and 8 deletions
|
@ -187,7 +187,13 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure CGUs are sorted by name, so that we get deterministic results.
|
// Ensure CGUs are sorted by name, so that we get deterministic results.
|
||||||
assert!(codegen_units.is_sorted_by(|a, b| Some(a.name().as_str().cmp(b.name().as_str()))));
|
if !codegen_units.is_sorted_by(|a, b| Some(a.name().as_str().cmp(b.name().as_str()))) {
|
||||||
|
let mut names = String::new();
|
||||||
|
for cgu in codegen_units.iter() {
|
||||||
|
names += &format!("- {}\n", cgu.name());
|
||||||
|
}
|
||||||
|
bug!("unsorted CGUs:\n{names}");
|
||||||
|
}
|
||||||
|
|
||||||
codegen_units
|
codegen_units
|
||||||
}
|
}
|
||||||
|
|
|
@ -213,15 +213,16 @@ fn rematch_object<'tcx>(
|
||||||
mut nested: Vec<PredicateObligation<'tcx>>,
|
mut nested: Vec<PredicateObligation<'tcx>>,
|
||||||
) -> SelectionResult<'tcx, Selection<'tcx>> {
|
) -> SelectionResult<'tcx, Selection<'tcx>> {
|
||||||
let self_ty = goal.predicate.self_ty();
|
let self_ty = goal.predicate.self_ty();
|
||||||
let source_trait_ref = if let ty::Dynamic(data, _, ty::Dyn) = self_ty.kind() {
|
let ty::Dynamic(data, _, source_kind) = *self_ty.kind()
|
||||||
data.principal().unwrap().with_self_ty(infcx.tcx, self_ty)
|
else {
|
||||||
} else {
|
|
||||||
bug!()
|
bug!()
|
||||||
};
|
};
|
||||||
|
let source_trait_ref = data.principal().unwrap().with_self_ty(infcx.tcx, self_ty);
|
||||||
|
|
||||||
let (is_upcasting, target_trait_ref_unnormalized) = if Some(goal.predicate.def_id())
|
let (is_upcasting, target_trait_ref_unnormalized) = if Some(goal.predicate.def_id())
|
||||||
== infcx.tcx.lang_items().unsize_trait()
|
== infcx.tcx.lang_items().unsize_trait()
|
||||||
{
|
{
|
||||||
|
assert_eq!(source_kind, ty::Dyn, "cannot upcast dyn*");
|
||||||
if let ty::Dynamic(data, _, ty::Dyn) = goal.predicate.trait_ref.substs.type_at(1).kind() {
|
if let ty::Dynamic(data, _, ty::Dyn) = goal.predicate.trait_ref.substs.type_at(1).kind() {
|
||||||
(true, data.principal().unwrap().with_self_ty(infcx.tcx, self_ty))
|
(true, data.principal().unwrap().with_self_ty(infcx.tcx, self_ty))
|
||||||
} else {
|
} else {
|
||||||
|
@ -288,7 +289,8 @@ fn rematch_object<'tcx>(
|
||||||
bug!();
|
bug!();
|
||||||
};
|
};
|
||||||
|
|
||||||
// If we're upcasting, get the offset of the vtable pointer, which is
|
// If we're upcasting, get the offset of the vtable pointer, otherwise get
|
||||||
|
// the base of the vtable.
|
||||||
Ok(Some(if is_upcasting {
|
Ok(Some(if is_upcasting {
|
||||||
ImplSource::TraitUpcasting(ImplSourceTraitUpcastingData { vtable_vptr_slot, nested })
|
ImplSource::TraitUpcasting(ImplSourceTraitUpcastingData { vtable_vptr_slot, nested })
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -83,7 +83,7 @@ impl ProcOutput {
|
||||||
}
|
}
|
||||||
|
|
||||||
let new_len = bytes.len();
|
let new_len = bytes.len();
|
||||||
if *filtered_len <= HEAD_LEN + TAIL_LEN {
|
if (*filtered_len).min(new_len) <= HEAD_LEN + TAIL_LEN {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4022,8 +4022,11 @@ impl<'test> TestCx<'test> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn normalize_output(&self, output: &str, custom_rules: &[(String, String)]) -> String {
|
fn normalize_output(&self, output: &str, custom_rules: &[(String, String)]) -> String {
|
||||||
|
let rflags = self.props.run_flags.as_ref();
|
||||||
let cflags = self.props.compile_flags.join(" ");
|
let cflags = self.props.compile_flags.join(" ");
|
||||||
let json = cflags.contains("--error-format json")
|
let json = rflags
|
||||||
|
.map_or(false, |s| s.contains("--format json") || s.contains("--format=json"))
|
||||||
|
|| cflags.contains("--error-format json")
|
||||||
|| cflags.contains("--error-format pretty-json")
|
|| cflags.contains("--error-format pretty-json")
|
||||||
|| cflags.contains("--error-format=json")
|
|| cflags.contains("--error-format=json")
|
||||||
|| cflags.contains("--error-format=pretty-json")
|
|| cflags.contains("--error-format=pretty-json")
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
// run-pass
|
// run-pass
|
||||||
// compile-flags: -C opt-level=0
|
// revisions: current next
|
||||||
|
//[current] compile-flags: -C opt-level=0
|
||||||
|
//[next] compile-flags: -Ztrait-solver=next -C opt-level=0
|
||||||
|
|
||||||
#![feature(dyn_star)]
|
#![feature(dyn_star)]
|
||||||
#![allow(incomplete_features)]
|
#![allow(incomplete_features)]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue