mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-26 05:44:26 +00:00
Add regression tests
This commit is contained in:
parent
d1fff4a4b2
commit
2bd28d9d58
20
src/test/ui/dropck/dropck_fn_type.rs
Normal file
20
src/test/ui/dropck/dropck_fn_type.rs
Normal file
@ -0,0 +1,20 @@
|
||||
// run-pass
|
||||
//! Regression test for #58311, regarding the usage of Fn types in drop impls
|
||||
|
||||
// All of this Drop impls should compile.
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct S<F: Fn() -> [u8; 1]>(F);
|
||||
|
||||
impl<F: Fn() -> [u8; 1]> Drop for S<F> {
|
||||
fn drop(&mut self) {}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct P<A, F: FnOnce() -> [A; 10]>(F);
|
||||
|
||||
impl<A, F: FnOnce() -> [A; 10]> Drop for P<A, F> {
|
||||
fn drop(&mut self) {}
|
||||
}
|
||||
|
||||
fn main() {}
|
68
src/test/ui/dropck/dropck_traits.rs
Normal file
68
src/test/ui/dropck/dropck_traits.rs
Normal file
@ -0,0 +1,68 @@
|
||||
// run-pass
|
||||
//! Regression test for #34426, regarding HRTB in drop impls
|
||||
|
||||
// All of this Drop impls should compile.
|
||||
|
||||
pub trait Lifetime<'a> {}
|
||||
impl<'a> Lifetime<'a> for i32 {}
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct Foo<L>
|
||||
where
|
||||
for<'a> L: Lifetime<'a>,
|
||||
{
|
||||
l: L,
|
||||
}
|
||||
|
||||
impl<L> Drop for Foo<L>
|
||||
where
|
||||
for<'a> L: Lifetime<'a>,
|
||||
{
|
||||
fn drop(&mut self) {}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct Foo2<L>
|
||||
where
|
||||
for<'a> L: Lifetime<'a>,
|
||||
{
|
||||
l: L,
|
||||
}
|
||||
|
||||
impl<T: for<'a> Lifetime<'a>> Drop for Foo2<T>
|
||||
where
|
||||
for<'x> T: Lifetime<'x>,
|
||||
{
|
||||
fn drop(&mut self) {}
|
||||
}
|
||||
|
||||
pub trait Lifetime2<'a, 'b> {}
|
||||
impl<'a, 'b> Lifetime2<'a, 'b> for i32 {}
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct Bar<L>
|
||||
where
|
||||
for<'a, 'b> L: Lifetime2<'a, 'b>,
|
||||
{
|
||||
l: L,
|
||||
}
|
||||
|
||||
impl<L> Drop for Bar<L>
|
||||
where
|
||||
for<'a, 'b> L: Lifetime2<'a, 'b>,
|
||||
{
|
||||
fn drop(&mut self) {}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
struct FnHolder<T: for<'a> Fn(&'a T, dyn for<'b> Lifetime2<'a, 'b>) -> u8>(T);
|
||||
|
||||
impl<T: for<'a> Fn(&'a T, dyn for<'b> Lifetime2<'a, 'b>) -> u8> Drop for FnHolder<T> {
|
||||
fn drop(&mut self) {}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let _foo = Foo { l: 0 };
|
||||
|
||||
let _bar = Bar { l: 0 };
|
||||
}
|
Loading…
Reference in New Issue
Block a user