]> git.lizzy.rs Git - rust.git/commitdiff
raw slices do not have to comply to the size limit
authorRalf Jung <post@ralfj.de>
Mon, 26 Aug 2019 17:48:56 +0000 (19:48 +0200)
committerRalf Jung <post@ralfj.de>
Mon, 26 Aug 2019 18:14:58 +0000 (20:14 +0200)
src/librustc_mir/interpret/validity.rs

index 7af55a2a3a37615804dd841dfe6665fbf159339f..c2505547c5b4fe2103ccadd20db8588f25aff88e 100644 (file)
@@ -3,7 +3,7 @@
 
 use syntax_pos::symbol::{sym, Symbol};
 use rustc::hir;
-use rustc::ty::layout::{self, Size, TyLayout, LayoutOf, VariantIdx};
+use rustc::ty::layout::{self, TyLayout, LayoutOf, VariantIdx};
 use rustc::ty;
 use rustc_data_structures::fx::FxHashSet;
 
@@ -276,20 +276,11 @@ fn check_wide_ptr_meta(
                 // FIXME: More checks for the vtable.
             }
             ty::Slice(..) | ty::Str => {
-                let len = try_validation!(meta.unwrap().to_usize(self.ecx),
+                let _len = try_validation!(meta.unwrap().to_usize(self.ecx),
                     "non-integer slice length in wide pointer", self.path);
-                // check max slice length
-                let elem_size = match tail.sty {
-                    ty::Str => Size::from_bytes(1),
-                    ty::Slice(ty) => self.ecx.layout_of(ty)?.size,
-                    _ => bug!("It cannot be another type"),
-                };
-                if elem_size.checked_mul(len, &*self.ecx.tcx).is_none() {
-                    throw_validation_failure!(
-                        "too large slice (longer than isize::MAX bytes)",
-                        self.path
-                    );
-                }
+                // We do not check that `len * elem_size <= isize::MAX`:
+                // that is only required for references, and there it falls out of the
+                // "dereferencable" check performed by Stacked Borrows.
             }
             ty::Foreign(..) => {
                 // Unsized, but not wide.