about summary refs log tree commit diff
diff options
context:
space:
mode:
authorljedrz <ljedrz@gmail.com>2018-10-02 11:00:41 +0200
committerljedrz <ljedrz@gmail.com>2018-10-03 09:04:02 +0200
commit04b99bc10390514832197b30c34a3993cd028092 (patch)
treeba27e9dbf745c1f6a9f1a223b0f86094a01a7e59
parentdb171649d3e2298859740d164f92e99c8bd3cf4b (diff)
downloadrust-04b99bc10390514832197b30c34a3993cd028092.tar.gz
rust-04b99bc10390514832197b30c34a3993cd028092.zip
rustc/ty: improve allocations
-rw-r--r--src/librustc/ty/outlives.rs6
-rw-r--r--src/librustc/ty/subst.rs1
-rw-r--r--src/librustc/ty/wf.rs1
3 files changed, 3 insertions, 5 deletions
diff --git a/src/librustc/ty/outlives.rs b/src/librustc/ty/outlives.rs
index e77080a0c91..350af6b9305 100644
--- a/src/librustc/ty/outlives.rs
+++ b/src/librustc/ty/outlives.rs
@@ -180,9 +180,5 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
 }
 
 fn push_region_constraints<'tcx>(out: &mut Vec<Component<'tcx>>, regions: Vec<ty::Region<'tcx>>) {
-    for r in regions {
-        if !r.is_late_bound() {
-            out.push(Component::Region(r));
-        }
-    }
+    out.extend(regions.iter().filter(|&r| !r.is_late_bound()).map(|r| Component::Region(r)));
 }
diff --git a/src/librustc/ty/subst.rs b/src/librustc/ty/subst.rs
index 72d720b138a..c0a42fd5854 100644
--- a/src/librustc/ty/subst.rs
+++ b/src/librustc/ty/subst.rs
@@ -229,6 +229,7 @@ impl<'a, 'gcx, 'tcx> Substs<'tcx> {
                       mk_kind: &mut F)
     where F: FnMut(&ty::GenericParamDef, &[Kind<'tcx>]) -> Kind<'tcx>
     {
+        substs.reserve(defs.params.len());
         for param in &defs.params {
             let kind = mk_kind(param, substs);
             assert_eq!(param.index as usize, substs.len());
diff --git a/src/librustc/ty/wf.rs b/src/librustc/ty/wf.rs
index a5a0be21f2e..e2cc55a693f 100644
--- a/src/librustc/ty/wf.rs
+++ b/src/librustc/ty/wf.rs
@@ -493,6 +493,7 @@ impl<'a, 'gcx, 'tcx> WfPredicates<'a, 'gcx, 'tcx> {
 
             let explicit_bound = region;
 
+            self.out.reserve(implicit_bounds.len());
             for implicit_bound in implicit_bounds {
                 let cause = self.cause(traits::ObjectTypeBound(ty, explicit_bound));
                 let outlives = ty::Binder::dummy(