about summary refs log tree commit diff
diff options
context:
space:
mode:
authorkennytm <kennytm@gmail.com>2018-05-23 00:26:23 +0800
committerGitHub <noreply@github.com>2018-05-23 00:26:23 +0800
commit0c4d337c3c4bf6ec0878f98251f4d1a1482cf56c (patch)
tree4975803176a0a9a8e040d30f83ac41ecf489b5a0
parent28e43582a3b2d1724cd81dfd88cb2a54e85e9544 (diff)
parenta86544b799b0fe81e2e2a734a2b49d16faad4f3d (diff)
downloadrust-0c4d337c3c4bf6ec0878f98251f4d1a1482cf56c.tar.gz
rust-0c4d337c3c4bf6ec0878f98251f4d1a1482cf56c.zip
Rollup merge of #50963 - nnethercote:coercion-VecDeque1, r=petrochenkov
Right-size the `VecDeque` in `coerce_unsized`.

The default capacity of a VecDeque is 8, which is excessive here. In a
"base incremental" check build of rustc-perf's tuple-stress benchmark,
this decreases total heap allocation by 26%. I couldn't see a clear
speedup, but it can't hurt.
-rw-r--r--src/librustc_typeck/check/coercion.rs5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/librustc_typeck/check/coercion.rs b/src/librustc_typeck/check/coercion.rs
index 5b3484dcccb..76219c6971b 100644
--- a/src/librustc_typeck/check/coercion.rs
+++ b/src/librustc_typeck/check/coercion.rs
@@ -537,8 +537,9 @@ impl<'f, 'gcx, 'tcx> Coerce<'f, 'gcx, 'tcx> {
 
         let mut selcx = traits::SelectionContext::new(self);
 
-        // Use a FIFO queue for this custom fulfillment procedure.
-        let mut queue = VecDeque::new();
+        // Use a FIFO queue for this custom fulfillment procedure. (The maximum
+        // length is almost always 1.)
+        let mut queue = VecDeque::with_capacity(1);
 
         // Create an obligation for `Source: CoerceUnsized<Target>`.
         let cause = ObligationCause::misc(self.cause.span, self.body_id);