mirror of https://github.com/rust-lang/rust
67 lines
1.2 KiB
Rust
67 lines
1.2 KiB
Rust
// Regression test for #74429, where we didn't think that a type parameter
|
|
// outlived `ReEmpty`.
|
|
|
|
//@ check-pass
|
|
|
|
use std::marker::PhantomData;
|
|
use std::ptr::NonNull;
|
|
|
|
pub unsafe trait RawData {
|
|
type Elem;
|
|
}
|
|
|
|
unsafe impl<A> RawData for OwnedRepr<A> {
|
|
type Elem = A;
|
|
}
|
|
|
|
unsafe impl<'a, A> RawData for ViewRepr<&'a A> {
|
|
type Elem = A;
|
|
}
|
|
|
|
pub struct OwnedRepr<A> {
|
|
ptr: PhantomData<A>,
|
|
}
|
|
|
|
// these Copy impls are not necessary for the repro, but allow the code to compile without error
|
|
// on 1.44.1
|
|
#[derive(Copy, Clone)]
|
|
pub struct ViewRepr<A> {
|
|
life: PhantomData<A>,
|
|
}
|
|
|
|
#[derive(Copy, Clone)]
|
|
pub struct ArrayBase<S>
|
|
where
|
|
S: RawData,
|
|
{
|
|
ptr: NonNull<S::Elem>,
|
|
}
|
|
|
|
pub type Array<A> = ArrayBase<OwnedRepr<A>>;
|
|
|
|
pub type ArrayView<'a, A> = ArrayBase<ViewRepr<&'a A>>;
|
|
|
|
impl<A, S> ArrayBase<S>
|
|
where
|
|
S: RawData<Elem = A>,
|
|
{
|
|
pub fn index_axis(&self) -> ArrayView<'_, A> {
|
|
unimplemented!()
|
|
}
|
|
|
|
pub fn axis_iter<'a>(&'a self) -> std::iter::Empty<&'a A> {
|
|
unimplemented!()
|
|
}
|
|
}
|
|
|
|
pub fn x<T: Copy>(a: Array<T>) {
|
|
// _ just avoids a must_use warning
|
|
let _ = (0..1).filter(|_| true);
|
|
let y = a.index_axis();
|
|
a.axis_iter().for_each(|_| {
|
|
let _ = y;
|
|
});
|
|
}
|
|
|
|
fn main() {}
|