},
GenericParamDefKind::Lifetime => continue,
};
- let name = param.name.as_symbol();
+ let name = param.name;
flags.push((name, Some(value)));
}
ty::Predicate::ObjectSafe(trait_def_id) => {
let violations = self.tcx.object_safety_violations(trait_def_id);
- if let Some(err) = self.tcx.report_object_safety_error(
+ self.tcx.report_object_safety_error(
span,
trait_def_id,
violations,
- ) {
- err
- } else {
- return;
- }
+ )
}
ty::Predicate::ClosureKind(closure_def_id, closure_substs, kind) => {
TraitNotObjectSafe(did) => {
let violations = self.tcx.object_safety_violations(did);
- if let Some(err) = self.tcx.report_object_safety_error(span, did, violations) {
- err
- } else {
- return;
- }
+ self.tcx.report_object_safety_error(span, did, violations)
}
// already reported in the query
span: Span,
trait_def_id: DefId,
violations: Vec<ObjectSafetyViolation>,
- ) -> Option<DiagnosticBuilder<'tcx>> {
- if self.sess.trait_methods_not_found.borrow().contains(&span) {
- // Avoid emitting error caused by non-existing method (#58734)
- return None;
- }
+ ) -> DiagnosticBuilder<'tcx> {
let trait_str = self.def_path_str(trait_def_id);
let span = self.sess.source_map().def_span(span);
let mut err = struct_span_err!(
};
}
}
- Some(err)
+
+ if self.sess.trait_methods_not_found.borrow().contains(&span) {
+ // Avoid emitting error caused by non-existing method (#58734)
+ err.cancel();
+ }
+
+ err
}
}
err.note(&format!("required for the cast to the object type `{}`",
self.ty_to_string(object_ty)));
}
+ ObligationCauseCode::Coercion { source: _, target } => {
+ err.note(&format!("required by cast to type `{}`",
+ self.ty_to_string(target)));
+ }
ObligationCauseCode::RepeatVec => {
err.note("the `Copy` trait is required because the \
repeated element will be copied");