Skip to content

Commit acaad3c

Browse files
committed
Reorder fullfillment errors to keep more interesting ones first
In `report_fullfillment_errors` push back `T: Sized`, `T: WellFormed` and coercion errors to the end of the list. The pre-existing deduplication logic eliminates redundant errors better that way, keeping the resulting output with fewer errors than before, while also having more detail.
1 parent d4d4936 commit acaad3c

File tree

72 files changed

+278
-393
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+278
-393
lines changed

compiler/rustc_borrowck/src/region_infer/opaque_types.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,7 @@ fn check_opaque_type_well_formed<'tcx>(
361361
if errors.is_empty() {
362362
Ok(definition_ty)
363363
} else {
364-
Err(infcx.err_ctxt().report_fulfillment_errors(&errors))
364+
Err(infcx.err_ctxt().report_fulfillment_errors(errors))
365365
}
366366
}
367367

compiler/rustc_const_eval/src/transform/check_consts/check.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -742,7 +742,7 @@ impl<'tcx> Visitor<'tcx> for Checker<'_, 'tcx> {
742742

743743
let errors = ocx.select_all_or_error();
744744
if !errors.is_empty() {
745-
infcx.err_ctxt().report_fulfillment_errors(&errors);
745+
infcx.err_ctxt().report_fulfillment_errors(errors);
746746
}
747747

748748
// Attempting to call a trait method?

compiler/rustc_hir_analysis/src/check/check.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -456,7 +456,7 @@ fn check_opaque_meets_bounds<'tcx>(
456456
// version.
457457
let errors = ocx.select_all_or_error();
458458
if !errors.is_empty() {
459-
let guar = infcx.err_ctxt().report_fulfillment_errors(&errors);
459+
let guar = infcx.err_ctxt().report_fulfillment_errors(errors);
460460
return Err(guar);
461461
}
462462
match origin {
@@ -1627,6 +1627,6 @@ pub(super) fn check_generator_obligations(tcx: TyCtxt<'_>, def_id: LocalDefId) {
16271627
let errors = fulfillment_cx.select_all_or_error(&infcx);
16281628
debug!(?errors);
16291629
if !errors.is_empty() {
1630-
infcx.err_ctxt().report_fulfillment_errors(&errors);
1630+
infcx.err_ctxt().report_fulfillment_errors(errors);
16311631
}
16321632
}

compiler/rustc_hir_analysis/src/check/compare_impl_item.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ fn compare_method_predicate_entailment<'tcx>(
313313
// FIXME(-Ztrait-solver=next): Not needed when the hack below is removed.
314314
let errors = ocx.select_where_possible();
315315
if !errors.is_empty() {
316-
let reported = infcx.err_ctxt().report_fulfillment_errors(&errors);
316+
let reported = infcx.err_ctxt().report_fulfillment_errors(errors);
317317
return Err(reported);
318318
}
319319

@@ -377,7 +377,7 @@ fn compare_method_predicate_entailment<'tcx>(
377377
});
378378
}
379379
CheckImpliedWfMode::Skip => {
380-
let reported = infcx.err_ctxt().report_fulfillment_errors(&errors);
380+
let reported = infcx.err_ctxt().report_fulfillment_errors(errors);
381381
return Err(reported);
382382
}
383383
}
@@ -776,7 +776,7 @@ pub(super) fn collect_return_position_impl_trait_in_trait_tys<'tcx>(
776776
// RPITs.
777777
let errors = ocx.select_all_or_error();
778778
if !errors.is_empty() {
779-
let reported = infcx.err_ctxt().report_fulfillment_errors(&errors);
779+
let reported = infcx.err_ctxt().report_fulfillment_errors(errors);
780780
return Err(reported);
781781
}
782782

@@ -1951,7 +1951,7 @@ fn compare_const_predicate_entailment<'tcx>(
19511951
// version.
19521952
let errors = ocx.select_all_or_error();
19531953
if !errors.is_empty() {
1954-
return Err(infcx.err_ctxt().report_fulfillment_errors(&errors));
1954+
return Err(infcx.err_ctxt().report_fulfillment_errors(errors));
19551955
}
19561956

19571957
let outlives_env = OutlivesEnvironment::new(param_env);
@@ -2044,7 +2044,7 @@ fn compare_type_predicate_entailment<'tcx>(
20442044
// version.
20452045
let errors = ocx.select_all_or_error();
20462046
if !errors.is_empty() {
2047-
let reported = infcx.err_ctxt().report_fulfillment_errors(&errors);
2047+
let reported = infcx.err_ctxt().report_fulfillment_errors(errors);
20482048
return Err(reported);
20492049
}
20502050

@@ -2259,7 +2259,7 @@ pub(super) fn check_type_bounds<'tcx>(
22592259
// version.
22602260
let errors = ocx.select_all_or_error();
22612261
if !errors.is_empty() {
2262-
let reported = infcx.err_ctxt().report_fulfillment_errors(&errors);
2262+
let reported = infcx.err_ctxt().report_fulfillment_errors(errors);
22632263
return Err(reported);
22642264
}
22652265

compiler/rustc_hir_analysis/src/check/entry.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ fn check_main_fn_ty(tcx: TyCtxt<'_>, main_def_id: DefId) {
158158
ocx.register_bound(cause, param_env, norm_return_ty, term_did);
159159
let errors = ocx.select_all_or_error();
160160
if !errors.is_empty() {
161-
infcx.err_ctxt().report_fulfillment_errors(&errors);
161+
infcx.err_ctxt().report_fulfillment_errors(errors);
162162
error = true;
163163
}
164164
// now we can take the return type of the given main function

compiler/rustc_hir_analysis/src/check/wfcheck.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ pub(super) fn enter_wf_checking_ctxt<'tcx, F>(
113113

114114
let errors = wfcx.select_all_or_error();
115115
if !errors.is_empty() {
116-
infcx.err_ctxt().report_fulfillment_errors(&errors);
116+
infcx.err_ctxt().report_fulfillment_errors(errors);
117117
return;
118118
}
119119

compiler/rustc_hir_analysis/src/coherence/builtin.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ fn visit_implementation_of_dispatch_from_dyn(tcx: TyCtxt<'_>, impl_did: LocalDef
271271
}
272272
let errors = ocx.select_all_or_error();
273273
if !errors.is_empty() {
274-
infcx.err_ctxt().report_fulfillment_errors(&errors);
274+
infcx.err_ctxt().report_fulfillment_errors(errors);
275275
}
276276

277277
// Finally, resolve all regions.
@@ -511,7 +511,7 @@ pub fn coerce_unsized_info<'tcx>(tcx: TyCtxt<'tcx>, impl_did: LocalDefId) -> Coe
511511
ocx.register_obligation(obligation);
512512
let errors = ocx.select_all_or_error();
513513
if !errors.is_empty() {
514-
infcx.err_ctxt().report_fulfillment_errors(&errors);
514+
infcx.err_ctxt().report_fulfillment_errors(errors);
515515
}
516516

517517
// Finally, resolve all regions.

compiler/rustc_hir_analysis/src/impl_wf_check/min_specialization.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ fn get_impl_args(
196196

197197
let errors = ocx.select_all_or_error();
198198
if !errors.is_empty() {
199-
let guar = ocx.infcx.err_ctxt().report_fulfillment_errors(&errors);
199+
let guar = ocx.infcx.err_ctxt().report_fulfillment_errors(errors);
200200
return Err(guar);
201201
}
202202

compiler/rustc_hir_analysis/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ fn require_same_types<'tcx>(
164164
Ok(()) => {
165165
let errors = ocx.select_all_or_error();
166166
if !errors.is_empty() {
167-
infcx.err_ctxt().report_fulfillment_errors(&errors);
167+
infcx.err_ctxt().report_fulfillment_errors(errors);
168168
}
169169
}
170170
Err(err) => {

compiler/rustc_hir_typeck/src/expr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3004,7 +3004,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
30043004
// There should be at least one error reported. If not, we
30053005
// will still delay a span bug in `report_fulfillment_errors`.
30063006
Ok::<_, NoSolution>((
3007-
self.err_ctxt().report_fulfillment_errors(&errors),
3007+
self.err_ctxt().report_fulfillment_errors(errors),
30083008
impl_trait_ref.args.type_at(1),
30093009
element_ty,
30103010
))

0 commit comments

Comments
 (0)