);
assert!(u64::from(from) <= n - u64::from(to));
let ptr = base_ptr.offset(u64::from(from) * elem_size, &self)?;
- let extra = LvalueExtra::Length(n - u64::from(to) - u64::from(from));
+ // sublicing arrays produces arrays
+ let extra = if self.type_is_sized(base_ty) {
+ LvalueExtra::None
+ } else {
+ LvalueExtra::Length(n - u64::from(to) - u64::from(from))
+ };
(ptr, extra)
}
};
--- /dev/null
+#![feature(advanced_slice_patterns)]
+#![feature(slice_patterns)]
+
+fn bar(a: &'static str, b: &'static str) -> [&'static str; 4] {
+ [a, b, b, a]
+}
+
+fn main() {
+ let out = bar("baz", "foo");
+ let [a, xs.., d] = out;
+ assert_eq!(a, "baz");
+ assert_eq!(xs, ["foo", "foo"]);
+ assert_eq!(d, "baz");
+}