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
|
@ -702,7 +702,11 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
/// Constructs a `TyKind::Error` type and registers a `delay_span_bug` with the given `msg` to
|
||||
/// ensure it gets used.
|
||||
#[track_caller]
|
||||
pub fn ty_error_with_message<S: Into<MultiSpan>>(self, span: S, msg: &str) -> Ty<'tcx> {
|
||||
pub fn ty_error_with_message<S: Into<MultiSpan>>(
|
||||
self,
|
||||
span: S,
|
||||
msg: impl Into<DiagnosticMessage>,
|
||||
) -> Ty<'tcx> {
|
||||
let reported = self.sess.delay_span_bug(span, msg);
|
||||
self.mk_ty_from_kind(Error(reported))
|
||||
}
|
||||
|
@ -2435,7 +2439,7 @@ impl<'tcx> TyCtxtAt<'tcx> {
|
|||
/// Constructs a `TyKind::Error` type and registers a `delay_span_bug` with the given `msg` to
|
||||
/// ensure it gets used.
|
||||
#[track_caller]
|
||||
pub fn ty_error_with_message(self, msg: &str) -> Ty<'tcx> {
|
||||
pub fn ty_error_with_message(self, msg: impl Into<DiagnosticMessage>) -> Ty<'tcx> {
|
||||
self.tcx.ty_error_with_message(self.span, msg)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -268,7 +268,7 @@ pub struct LayoutCx<'tcx, C> {
|
|||
impl<'tcx> LayoutCalculator for LayoutCx<'tcx, TyCtxt<'tcx>> {
|
||||
type TargetDataLayoutRef = &'tcx TargetDataLayout;
|
||||
|
||||
fn delay_bug(&self, txt: &str) {
|
||||
fn delay_bug(&self, txt: String) {
|
||||
self.tcx.sess.delay_span_bug(DUMMY_SP, txt);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue