File tree Expand file tree Collapse file tree 6 files changed +92
-0
lines changed Expand file tree Collapse file tree 6 files changed +92
-0
lines changed Original file line number Diff line number Diff line change 1+ // run-pass
2+
3+ #![ feature( const_ptr_nonnull) ]
4+
5+ use std:: ptr:: NonNull ;
6+
7+ const fn dangling ( ) -> NonNull < u32 > {
8+ NonNull :: dangling ( )
9+ }
10+
11+ const fn cast < T , U > ( non_null : NonNull < T > ) -> NonNull < U > {
12+ non_null. cast ( )
13+ }
14+
15+ pub fn main ( ) {
16+ assert_eq ! ( dangling( ) , NonNull :: dangling( ) ) ;
17+
18+ let mut i: i32 = 10 ;
19+ let non_null_t = NonNull :: new ( & mut i) . unwrap ( ) ;
20+ let non_null_u: NonNull < u32 > = cast ( non_null_t) ;
21+ assert_eq ! ( non_null_t. as_ptr( ) , non_null_u. as_ptr( ) as * mut i32 ) ;
22+ }
Original file line number Diff line number Diff line change 1+ // run-pass
2+
3+ #![ feature( ptr_internals) ]
4+
5+ use std:: ptr:: Unique ;
6+
7+ const fn as_ptr < T > ( ptr : Unique < T > ) -> * mut T {
8+ ptr. as_ptr ( )
9+ }
10+
11+ pub fn main ( ) {
12+ let mut i: i32 = 10 ;
13+ let unique = Unique :: new ( & mut i) . unwrap ( ) ;
14+ assert_eq ! ( unique. as_ptr( ) , as_ptr( unique) ) ;
15+ }
Original file line number Diff line number Diff line change 1+ use std:: ptr:: NonNull ;
2+
3+ fn main ( ) {
4+ let x: & ' static NonNull < u32 > = & ( NonNull :: dangling ( ) ) ; //~ ERROR borrowed value does not live long enough
5+
6+ let mut i: i32 = 10 ;
7+ let non_null = NonNull :: new ( & mut i) . unwrap ( ) ;
8+ let x: & ' static NonNull < u32 > = & ( non_null. cast ( ) ) ; //~ ERROR borrowed value does not live long enough
9+ }
Original file line number Diff line number Diff line change 1+ error[E0597]: borrowed value does not live long enough
2+ --> $DIR/const-ptr-nonnull.rs:4:37
3+ |
4+ LL | let x: &'static NonNull<u32> = &(NonNull::dangling()); //~ ERROR borrowed value does not live long enough
5+ | ^^^^^^^^^^^^^^^^^^^^^ temporary value does not live long enough
6+ ...
7+ LL | }
8+ | - temporary value only lives until here
9+ |
10+ = note: borrowed value must be valid for the static lifetime...
11+
12+ error[E0597]: borrowed value does not live long enough
13+ --> $DIR/const-ptr-nonnull.rs:8:37
14+ |
15+ LL | let x: &'static NonNull<u32> = &(non_null.cast()); //~ ERROR borrowed value does not live long enough
16+ | ^^^^^^^^^^^^^^^^^ temporary value does not live long enough
17+ LL | }
18+ | - temporary value only lives until here
19+ |
20+ = note: borrowed value must be valid for the static lifetime...
21+
22+ error: aborting due to 2 previous errors
23+
24+ For more information about this error, try `rustc --explain E0597`.
Original file line number Diff line number Diff line change 1+ #![ feature( ptr_internals) ]
2+
3+ use std:: ptr:: Unique ;
4+
5+ fn main ( ) {
6+ let mut i: u32 = 10 ;
7+ let unique = Unique :: new ( & mut i) . unwrap ( ) ;
8+ let x: & ' static * mut u32 = & ( unique. as_ptr ( ) ) ; //~ ERROR borrowed value does not live long enough
9+ }
Original file line number Diff line number Diff line change 1+ error[E0597]: borrowed value does not live long enough
2+ --> $DIR/const-ptr-unique.rs:8:33
3+ |
4+ LL | let x: &'static *mut u32 = &(unique.as_ptr()); //~ ERROR borrowed value does not live long enough
5+ | ^^^^^^^^^^^^^^^^^ temporary value does not live long enough
6+ LL | }
7+ | - temporary value only lives until here
8+ |
9+ = note: borrowed value must be valid for the static lifetime...
10+
11+ error: aborting due to previous error
12+
13+ For more information about this error, try `rustc --explain E0597`.
You can’t perform that action at this time.
0 commit comments