about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorbjorn3 <bjorn3@users.noreply.github.com>2019-03-29 17:23:52 +0100
committerbjorn3 <bjorn3@users.noreply.github.com>2019-03-29 17:23:52 +0100
commit35705dee7eb10783280e0be92aedfc187e019dd2 (patch)
treece087c1461e548a2e67e96d358ac7de7633304b6 /src
parent56842b2154c0c2dd243f64e864b9c6aee718a161 (diff)
downloadrust-35705dee7eb10783280e0be92aedfc187e019dd2.tar.gz
rust-35705dee7eb10783280e0be92aedfc187e019dd2.zip
Use ExactSizeIterator + TrustedLen instead of num_cases arg for switch
Diffstat (limited to 'src')
-rw-r--r--src/librustc_codegen_llvm/builder.rs6
-rw-r--r--src/librustc_codegen_llvm/lib.rs1
-rw-r--r--src/librustc_codegen_ssa/lib.rs1
-rw-r--r--src/librustc_codegen_ssa/mir/block.rs1
-rw-r--r--src/librustc_codegen_ssa/traits/builder.rs4
5 files changed, 7 insertions, 6 deletions
diff --git a/src/librustc_codegen_llvm/builder.rs b/src/librustc_codegen_llvm/builder.rs
index fbeb978413a..123fda1e215 100644
--- a/src/librustc_codegen_llvm/builder.rs
+++ b/src/librustc_codegen_llvm/builder.rs
@@ -21,6 +21,7 @@ use rustc_codegen_ssa::mir::place::PlaceRef;
 use std::borrow::Cow;
 use std::ops::{Deref, Range};
 use std::ptr;
+use std::iter::TrustedLen;
 
 // All Builders must have an llfn associated with them
 #[must_use]
@@ -169,11 +170,10 @@ impl BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
         &mut self,
         v: &'ll Value,
         else_llbb: &'ll BasicBlock,
-        num_cases: usize,
-        cases: impl Iterator<Item = (u128, &'ll BasicBlock)>,
+        cases: impl ExactSizeIterator<Item = (u128, &'ll BasicBlock)> + TrustedLen,
     ) {
         let switch = unsafe {
-            llvm::LLVMBuildSwitch(self.llbuilder, v, else_llbb, num_cases as c_uint)
+            llvm::LLVMBuildSwitch(self.llbuilder, v, else_llbb, cases.len() as c_uint)
         };
         for (on_val, dest) in cases {
             let on_val = self.const_uint_big(self.val_ty(v), on_val);
diff --git a/src/librustc_codegen_llvm/lib.rs b/src/librustc_codegen_llvm/lib.rs
index c95feafa29a..0aae6b46e3d 100644
--- a/src/librustc_codegen_llvm/lib.rs
+++ b/src/librustc_codegen_llvm/lib.rs
@@ -20,6 +20,7 @@
 #![feature(concat_idents)]
 #![feature(link_args)]
 #![feature(static_nobundle)]
+#![feature(trusted_len)]
 #![deny(rust_2018_idioms)]
 #![allow(explicit_outlives_requirements)]
 
diff --git a/src/librustc_codegen_ssa/lib.rs b/src/librustc_codegen_ssa/lib.rs
index fe9b88c85f0..1e898ced7a6 100644
--- a/src/librustc_codegen_ssa/lib.rs
+++ b/src/librustc_codegen_ssa/lib.rs
@@ -10,6 +10,7 @@
 #![feature(try_blocks)]
 #![feature(in_band_lifetimes)]
 #![feature(nll)]
+#![feature(trusted_len)]
 #![allow(unused_attributes)]
 #![allow(dead_code)]
 #![deny(rust_2018_idioms)]
diff --git a/src/librustc_codegen_ssa/mir/block.rs b/src/librustc_codegen_ssa/mir/block.rs
index 0ce97553bea..98da07a905e 100644
--- a/src/librustc_codegen_ssa/mir/block.rs
+++ b/src/librustc_codegen_ssa/mir/block.rs
@@ -217,7 +217,6 @@ impl<'a, 'tcx: 'a, Bx: BuilderMethods<'a, 'tcx>> FunctionCx<'a, 'tcx, Bx> {
             bx.switch(
                 discr.immediate(),
                 helper.llblock(self, *otherwise),
-                values.len(),
                 values.iter().zip(targets).map(|(&value, target)| {
                     (value, helper.llblock(self, *target))
                 })
diff --git a/src/librustc_codegen_ssa/traits/builder.rs b/src/librustc_codegen_ssa/traits/builder.rs
index 3b0f047d974..48142fc9fa9 100644
--- a/src/librustc_codegen_ssa/traits/builder.rs
+++ b/src/librustc_codegen_ssa/traits/builder.rs
@@ -12,6 +12,7 @@ use crate::MemFlags;
 use rustc::ty::Ty;
 use rustc::ty::layout::{Align, Size};
 use std::ops::Range;
+use std::iter::TrustedLen;
 
 #[derive(Copy, Clone)]
 pub enum OverflowOp {
@@ -49,8 +50,7 @@ pub trait BuilderMethods<'a, 'tcx: 'a>:
         &mut self,
         v: Self::Value,
         else_llbb: Self::BasicBlock,
-        num_cases: usize,
-        cases: impl Iterator<Item = (u128, Self::BasicBlock)>,
+        cases: impl ExactSizeIterator<Item = (u128, Self::BasicBlock)> + TrustedLen,
     );
     fn invoke(
         &mut self,