Add test for multiple ref-self
This commit is contained in:
parent
aab9edc68a
commit
8507b8e42f
3 changed files with 73 additions and 7 deletions
43
src/test/ui/self/elision/multiple-ref-self.rs
Normal file
43
src/test/ui/self/elision/multiple-ref-self.rs
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
// check-pass
|
||||
|
||||
#![feature(arbitrary_self_types)]
|
||||
#![allow(non_snake_case)]
|
||||
|
||||
use std::marker::PhantomData;
|
||||
use std::ops::Deref;
|
||||
use std::pin::Pin;
|
||||
|
||||
struct Struct { }
|
||||
|
||||
struct Wrap<T, P>(T, PhantomData<P>);
|
||||
|
||||
impl<T, P> Deref for Wrap<T, P> {
|
||||
type Target = T;
|
||||
fn deref(&self) -> &T { &self.0 }
|
||||
}
|
||||
|
||||
impl Struct {
|
||||
// Test using multiple `&Self`:
|
||||
|
||||
fn wrap_ref_Self_ref_Self(self: Wrap<&Self, &Self>, f: &u8) -> &u8 {
|
||||
f
|
||||
}
|
||||
|
||||
fn box_wrap_ref_Self_ref_Self(self: Box<Wrap<&Self, &Self>>, f: &u32) -> &u32 {
|
||||
f
|
||||
}
|
||||
|
||||
fn pin_wrap_ref_Self_ref_Self(self: Pin<Wrap<&Self, &Self>>, f: &u32) -> &u32 {
|
||||
f
|
||||
}
|
||||
|
||||
fn box_box_wrap_ref_Self_ref_Self(self: Box<Box<Wrap<&Self, &Self>>>, f: &u32) -> &u32 {
|
||||
f
|
||||
}
|
||||
|
||||
fn box_pin_wrap_ref_Self_ref_Self(self: Box<Pin<Wrap<&Self, &Self>>>, f: &u32) -> &u32 {
|
||||
f
|
||||
}
|
||||
}
|
||||
|
||||
fn main() { }
|
||||
|
|
@ -1,10 +1,19 @@
|
|||
#![feature(arbitrary_self_types)]
|
||||
#![allow(non_snake_case)]
|
||||
|
||||
use std::marker::PhantomData;
|
||||
use std::ops::Deref;
|
||||
use std::pin::Pin;
|
||||
|
||||
struct Struct { }
|
||||
|
||||
struct Wrap<T, P>(T, PhantomData<P>);
|
||||
|
||||
impl<T, P> Deref for Wrap<T, P> {
|
||||
type Target = T;
|
||||
fn deref(&self) -> &T { &self.0 }
|
||||
}
|
||||
|
||||
impl Struct {
|
||||
// Test using `&self` sugar:
|
||||
|
||||
|
|
@ -33,6 +42,10 @@ impl Struct {
|
|||
fn box_pin_ref_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
|
||||
fn wrap_ref_Self_Self(self: Wrap<&Self, Self>, f: &u8) -> &u8 {
|
||||
f //~ ERROR lifetime mismatch
|
||||
}
|
||||
}
|
||||
|
||||
fn main() { }
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self.rs:14:9
|
||||
--> $DIR/ref-self.rs:21:9
|
||||
|
|
||||
LL | fn ref_self(&self, f: &u32) -> &u32 {
|
||||
| ---- ----
|
||||
|
|
@ -9,7 +9,7 @@ LL | f
|
|||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self.rs:20:9
|
||||
--> $DIR/ref-self.rs:27:9
|
||||
|
|
||||
LL | fn ref_Self(self: &Self, f: &u32) -> &u32 {
|
||||
| ---- ----
|
||||
|
|
@ -19,7 +19,7 @@ LL | f
|
|||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self.rs:24:9
|
||||
--> $DIR/ref-self.rs:31:9
|
||||
|
|
||||
LL | fn box_ref_Self(self: Box<&Self>, f: &u32) -> &u32 {
|
||||
| ---- ----
|
||||
|
|
@ -29,7 +29,7 @@ LL | f
|
|||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self.rs:28:9
|
||||
--> $DIR/ref-self.rs:35:9
|
||||
|
|
||||
LL | fn pin_ref_Self(self: Pin<&Self>, f: &u32) -> &u32 {
|
||||
| ---- ----
|
||||
|
|
@ -39,7 +39,7 @@ LL | f
|
|||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self.rs:32:9
|
||||
--> $DIR/ref-self.rs:39:9
|
||||
|
|
||||
LL | fn box_box_ref_Self(self: Box<Box<&Self>>, f: &u32) -> &u32 {
|
||||
| ---- ----
|
||||
|
|
@ -49,7 +49,7 @@ LL | f
|
|||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self.rs:36:9
|
||||
--> $DIR/ref-self.rs:43:9
|
||||
|
|
||||
LL | fn box_pin_ref_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
|
||||
| ---- ----
|
||||
|
|
@ -58,5 +58,15 @@ LL | fn box_pin_ref_Self(self: Box<Pin<&Self>>, f: &u32) -> &u32 {
|
|||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error: aborting due to 6 previous errors
|
||||
error[E0623]: lifetime mismatch
|
||||
--> $DIR/ref-self.rs:47:9
|
||||
|
|
||||
LL | fn wrap_ref_Self_Self(self: Wrap<&Self, Self>, f: &u8) -> &u8 {
|
||||
| --- ---
|
||||
| |
|
||||
| this parameter and the return type are declared with different lifetimes...
|
||||
LL | f
|
||||
| ^ ...but data from `f` is returned here
|
||||
|
||||
error: aborting due to 7 previous errors
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue