// Copyright 2015 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // // Licensed under the Apache License, Version 2.0 or the MIT license // , at your // option. This file may not be copied, modified, or distributed // except according to those terms. // compile-flags: -C debug-assertions use std::slice; pub fn main() { // In a slice of zero-size elements the pointer is meaningless. // Ensure iteration still works even if the pointer is at the end of the address space. let slice: &[()] = unsafe { slice::from_raw_parts(-5isize as *const (), 10) }; assert_eq!(slice.len(), 10); assert_eq!(slice.iter().count(), 10); // .nth() on the iterator should also behave correctly let mut it = slice.iter(); assert!(it.nth(5).is_some()); assert_eq!(it.count(), 4); let slice: &mut [()] = unsafe { slice::from_raw_parts_mut(-5isize as *mut (), 10) }; assert_eq!(slice.len(), 10); assert_eq!(slice.iter_mut().count(), 10); let mut it = slice.iter_mut(); assert!(it.nth(5).is_some()); assert_eq!(it.count(), 4); }