Avoid &format("...")
calls in error message code.
Error message all end up passing into a function as an `impl Into<{D,Subd}iagnosticMessage>`. If an error message is creatd as `&format("...")` that means we allocate a string (in the `format!` call), then take a reference, and then clone (allocating again) the reference to produce the `{D,Subd}iagnosticMessage`, which is silly. This commit removes the leading `&` from a lot of these cases. This means the original `String` is moved into the `{D,Subd}iagnosticMessage`, avoiding the double allocations. This requires changing some function argument types from `&str` to `String` (when all arguments are `String`) or `impl Into<{D,Subd}iagnosticMessage>` (when some arguments are `String` and some are `&str`).
This commit is contained in:
parent
87a2bc027c
commit
01e33a3600
37 changed files with 139 additions and 133 deletions
|
@ -430,7 +430,7 @@ pub(super) fn dump_annotation<'tcx>(
|
|||
fn for_each_region_constraint<'tcx>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
closure_region_requirements: &ClosureRegionRequirements<'tcx>,
|
||||
with_msg: &mut dyn FnMut(&str) -> io::Result<()>,
|
||||
with_msg: &mut dyn FnMut(String) -> io::Result<()>,
|
||||
) -> io::Result<()> {
|
||||
for req in &closure_region_requirements.outlives_requirements {
|
||||
let subject = match req.subject {
|
||||
|
@ -439,7 +439,7 @@ fn for_each_region_constraint<'tcx>(
|
|||
format!("{:?}", ty.instantiate(tcx, |vid| tcx.mk_re_var(vid)))
|
||||
}
|
||||
};
|
||||
with_msg(&format!("where {}: {:?}", subject, req.outlived_free_region,))?;
|
||||
with_msg(format!("where {}: {:?}", subject, req.outlived_free_region,))?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -71,7 +71,7 @@ macro_rules! span_mirbug {
|
|||
$crate::type_check::mirbug(
|
||||
$context.tcx(),
|
||||
$context.last_span,
|
||||
&format!(
|
||||
format!(
|
||||
"broken MIR in {:?} ({:?}): {}",
|
||||
$context.body().source.def_id(),
|
||||
$elem,
|
||||
|
@ -274,7 +274,7 @@ fn translate_outlives_facts(typeck: &mut TypeChecker<'_, '_>) {
|
|||
}
|
||||
|
||||
#[track_caller]
|
||||
fn mirbug(tcx: TyCtxt<'_>, span: Span, msg: &str) {
|
||||
fn mirbug(tcx: TyCtxt<'_>, span: Span, msg: String) {
|
||||
// We sometimes see MIR failures (notably predicate failures) due to
|
||||
// the fact that we check rvalue sized predicates here. So use `delay_span_bug`
|
||||
// to avoid reporting bugs in those cases.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue