1
1
//@ check-pass
2
2
3
- #![ feature( derive_smart_pointer ) ]
3
+ #![ feature( derive_coerce_referent ) ]
4
4
5
- #[ derive( core:: marker:: SmartPointer ) ]
5
+ #[ derive( core:: marker:: CoerceReferent ) ]
6
6
#[ repr( transparent) ]
7
- pub struct Ptr < ' a , #[ pointee ] T : OnDrop + ?Sized , X > {
7
+ pub struct Ptr < ' a , #[ referent ] T : OnDrop + ?Sized , X > {
8
8
data : & ' a mut T ,
9
9
x : core:: marker:: PhantomData < X > ,
10
10
}
@@ -13,9 +13,9 @@ pub trait OnDrop {
13
13
fn on_drop ( & mut self ) ;
14
14
}
15
15
16
- #[ derive( core:: marker:: SmartPointer ) ]
16
+ #[ derive( core:: marker:: CoerceReferent ) ]
17
17
#[ repr( transparent) ]
18
- pub struct Ptr2 < ' a , #[ pointee ] T : ?Sized , X >
18
+ pub struct Ptr2 < ' a , #[ referent ] T : ?Sized , X >
19
19
where
20
20
T : OnDrop ,
21
21
{
@@ -25,26 +25,26 @@ where
25
25
26
26
pub trait MyTrait < T : ?Sized > { }
27
27
28
- #[ derive( core:: marker:: SmartPointer ) ]
28
+ #[ derive( core:: marker:: CoerceReferent ) ]
29
29
#[ repr( transparent) ]
30
- pub struct Ptr3 < ' a , #[ pointee ] T : ?Sized , X >
30
+ pub struct Ptr3 < ' a , #[ referent ] T : ?Sized , X >
31
31
where
32
32
T : MyTrait < T > ,
33
33
{
34
34
data : & ' a mut T ,
35
35
x : core:: marker:: PhantomData < X > ,
36
36
}
37
37
38
- #[ derive( core:: marker:: SmartPointer ) ]
38
+ #[ derive( core:: marker:: CoerceReferent ) ]
39
39
#[ repr( transparent) ]
40
- pub struct Ptr4 < ' a , #[ pointee ] T : MyTrait < T > + ?Sized , X > {
40
+ pub struct Ptr4 < ' a , #[ referent ] T : MyTrait < T > + ?Sized , X > {
41
41
data : & ' a mut T ,
42
42
x : core:: marker:: PhantomData < X > ,
43
43
}
44
44
45
- #[ derive( core:: marker:: SmartPointer ) ]
45
+ #[ derive( core:: marker:: CoerceReferent ) ]
46
46
#[ repr( transparent) ]
47
- pub struct Ptr5 < ' a , #[ pointee ] T : ?Sized , X >
47
+ pub struct Ptr5 < ' a , #[ referent ] T : ?Sized , X >
48
48
where
49
49
Ptr5Companion < T > : MyTrait < T > ,
50
50
Ptr5Companion2 : MyTrait < T > ,
@@ -56,17 +56,17 @@ where
56
56
pub struct Ptr5Companion < T : ?Sized > ( core:: marker:: PhantomData < T > ) ;
57
57
pub struct Ptr5Companion2 ;
58
58
59
- #[ derive( core:: marker:: SmartPointer ) ]
59
+ #[ derive( core:: marker:: CoerceReferent ) ]
60
60
#[ repr( transparent) ]
61
- pub struct Ptr6 < ' a , #[ pointee ] T : ?Sized , X : MyTrait < T > = ( ) , const PARAM : usize = 0 > {
61
+ pub struct Ptr6 < ' a , #[ referent ] T : ?Sized , X : MyTrait < T > = ( ) , const PARAM : usize = 0 > {
62
62
data : & ' a mut T ,
63
63
x : core:: marker:: PhantomData < X > ,
64
64
}
65
65
66
66
// a reduced example from https://lore.kernel.org/all/20240402-linked-list-v1-1-b1c59ba7ae3b@google.com/
67
67
#[ repr( transparent) ]
68
- #[ derive( core:: marker:: SmartPointer ) ]
69
- pub struct ListArc < #[ pointee ] T , const ID : u64 = 0 >
68
+ #[ derive( core:: marker:: CoerceReferent ) ]
69
+ pub struct ListArc < #[ referent ] T , const ID : u64 = 0 >
70
70
where
71
71
T : ListArcSafe < ID > + ?Sized ,
72
72
{
0 commit comments