Skip to content

Commit b309646

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 4417513 commit b309646

File tree

76 files changed

+309
-403
lines changed

Some content is hidden

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

76 files changed

+309
-403
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
@@ -368,7 +368,7 @@ fn check_opaque_type_well_formed<'tcx>(
368368
if errors.is_empty() {
369369
Ok(definition_ty)
370370
} else {
371-
Err(infcx.err_ctxt().report_fulfillment_errors(&errors))
371+
Err(infcx.err_ctxt().report_fulfillment_errors(errors))
372372
}
373373
}
374374

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 {
@@ -1641,6 +1641,6 @@ pub(super) fn check_generator_obligations(tcx: TyCtxt<'_>, def_id: LocalDefId) {
16411641
let errors = fulfillment_cx.select_all_or_error(&infcx);
16421642
debug!(?errors);
16431643
if !errors.is_empty() {
1644-
infcx.err_ctxt().report_fulfillment_errors(&errors);
1644+
infcx.err_ctxt().report_fulfillment_errors(errors);
16451645
}
16461646
}

compiler/rustc_hir_analysis/src/check/compare_impl_item.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ fn compare_method_predicate_entailment<'tcx>(
322322
// FIXME(-Ztrait-solver=next): Not needed when the hack below is removed.
323323
let errors = ocx.select_where_possible();
324324
if !errors.is_empty() {
325-
let reported = infcx.err_ctxt().report_fulfillment_errors(&errors);
325+
let reported = infcx.err_ctxt().report_fulfillment_errors(errors);
326326
return Err(reported);
327327
}
328328

@@ -393,7 +393,7 @@ fn compare_method_predicate_entailment<'tcx>(
393393
});
394394
}
395395
CheckImpliedWfMode::Skip => {
396-
let reported = infcx.err_ctxt().report_fulfillment_errors(&errors);
396+
let reported = infcx.err_ctxt().report_fulfillment_errors(errors);
397397
return Err(reported);
398398
}
399399
}
@@ -873,7 +873,7 @@ pub(super) fn collect_return_position_impl_trait_in_trait_tys<'tcx>(
873873
// RPITs.
874874
let errors = ocx.select_all_or_error();
875875
if !errors.is_empty() {
876-
let reported = infcx.err_ctxt().report_fulfillment_errors(&errors);
876+
let reported = infcx.err_ctxt().report_fulfillment_errors(errors);
877877
return Err(reported);
878878
}
879879

@@ -2049,7 +2049,7 @@ fn compare_const_predicate_entailment<'tcx>(
20492049
// version.
20502050
let errors = ocx.select_all_or_error();
20512051
if !errors.is_empty() {
2052-
return Err(infcx.err_ctxt().report_fulfillment_errors(&errors));
2052+
return Err(infcx.err_ctxt().report_fulfillment_errors(errors));
20532053
}
20542054

20552055
let outlives_env = OutlivesEnvironment::new(param_env);
@@ -2142,7 +2142,7 @@ fn compare_type_predicate_entailment<'tcx>(
21422142
// version.
21432143
let errors = ocx.select_all_or_error();
21442144
if !errors.is_empty() {
2145-
let reported = infcx.err_ctxt().report_fulfillment_errors(&errors);
2145+
let reported = infcx.err_ctxt().report_fulfillment_errors(errors);
21462146
return Err(reported);
21472147
}
21482148

@@ -2357,7 +2357,7 @@ pub(super) fn check_type_bounds<'tcx>(
23572357
// version.
23582358
let errors = ocx.select_all_or_error();
23592359
if !errors.is_empty() {
2360-
let reported = infcx.err_ctxt().report_fulfillment_errors(&errors);
2360+
let reported = infcx.err_ctxt().report_fulfillment_errors(errors);
23612361
return Err(reported);
23622362
}
23632363

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/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -577,7 +577,7 @@ pub fn check_function_signature<'tcx>(
577577
Ok(()) => {
578578
let errors = ocx.select_all_or_error();
579579
if !errors.is_empty() {
580-
infcx.err_ctxt().report_fulfillment_errors(&errors);
580+
infcx.err_ctxt().report_fulfillment_errors(errors);
581581
return;
582582
}
583583
}

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
@@ -279,7 +279,7 @@ fn visit_implementation_of_dispatch_from_dyn(tcx: TyCtxt<'_>, impl_did: LocalDef
279279
}
280280
let errors = ocx.select_all_or_error();
281281
if !errors.is_empty() {
282-
infcx.err_ctxt().report_fulfillment_errors(&errors);
282+
infcx.err_ctxt().report_fulfillment_errors(errors);
283283
}
284284

285285
// Finally, resolve all regions.
@@ -519,7 +519,7 @@ pub fn coerce_unsized_info<'tcx>(tcx: TyCtxt<'tcx>, impl_did: LocalDefId) -> Coe
519519
ocx.register_obligation(obligation);
520520
let errors = ocx.select_all_or_error();
521521
if !errors.is_empty() {
522-
infcx.err_ctxt().report_fulfillment_errors(&errors);
522+
infcx.err_ctxt().report_fulfillment_errors(errors);
523523
}
524524

525525
// 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_typeck/src/expr.rs

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

0 commit comments

Comments
 (0)