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;
// 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.