From 04b99bc10390514832197b30c34a3993cd028092 Mon Sep 17 00:00:00 2001 From: ljedrz Date: Tue, 2 Oct 2018 11:00:41 +0200 Subject: [PATCH] rustc/ty: improve allocations --- src/librustc/ty/outlives.rs | 6 +----- src/librustc/ty/subst.rs | 1 + src/librustc/ty/wf.rs | 1 + 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/librustc/ty/outlives.rs b/src/librustc/ty/outlives.rs index e77080a0c9136..350af6b93057e 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>, regions: Vec>) { - 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 72d720b138aac..c0a42fd585482 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 a5a0be21f2e5f..e2cc55a693f3d 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(