diff options
| author | kennytm <kennytm@gmail.com> | 2018-05-23 00:26:23 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-05-23 00:26:23 +0800 |
| commit | 0c4d337c3c4bf6ec0878f98251f4d1a1482cf56c (patch) | |
| tree | 4975803176a0a9a8e040d30f83ac41ecf489b5a0 | |
| parent | 28e43582a3b2d1724cd81dfd88cb2a54e85e9544 (diff) | |
| parent | a86544b799b0fe81e2e2a734a2b49d16faad4f3d (diff) | |
| download | rust-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.rs | 5 |
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); |
