Skip to content

Commit e4c08f7

Browse files
committed
Start adding more comprehensive tests
1 parent fcff9e7 commit e4c08f7

9 files changed

Lines changed: 141 additions & 25 deletions

tests/ui/reborrow/custom_marker.rs

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,17 @@
11
#![feature(reborrow)]
2-
use std::ops::{CoerceShared, Reborrow};
2+
use std::ops::{Reborrow};
33
use std::marker::PhantomData;
44

55
#[derive(Debug)]
66
struct CustomMarker<'a>(PhantomData<&'a ()>);
7-
#[derive(Debug, Clone, Copy)]
8-
struct CustomMarkerRef<'a>(PhantomData<&'a ()>);
97
impl<'a> Reborrow for CustomMarker<'a> {}
10-
impl<'a> CoerceShared<CustomMarkerRef<'a>> for CustomMarker<'a> {}
11-
128

139
fn method<'a>(_a: CustomMarker<'a>) -> &'a () {
1410
&()
1511
}
1612

17-
fn method_two<'a>(_a: CustomMarkerRef<'a>) -> &'a () {
18-
&()
19-
}
20-
2113
fn main() {
2214
let a = CustomMarker(PhantomData);
23-
// let b = method(a);
24-
// let c = method(a); // should invalidate b
25-
let c = method_two(a); // should invalidate b
26-
println!("{c:?} {a:?}");
15+
let _ = method(a);
16+
let _ = method(a);
2717
}
28-
29-
// fn main_using_normal_references() {
30-
// let a = &mut ();
31-
// let b = method(a);
32-
// let _ = method(a);
33-
// eprintln!("{b}");
34-
// }
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#![feature(reborrow)]
2+
use std::ops::{CoerceShared, Reborrow};
3+
use std::marker::PhantomData;
4+
5+
#[derive(Debug)]
6+
struct CustomMarker<'a>(PhantomData<&'a ()>);
7+
impl<'a> Reborrow for CustomMarker<'a> {}
8+
#[derive(Debug, Clone, Copy)]
9+
struct CustomMarkerRef<'a>(PhantomData<&'a ()>);
10+
impl<'a> CoerceShared<CustomMarkerRef<'a>> for CustomMarker<'a> {}
11+
12+
13+
fn method<'a>(_a: CustomMarkerRef<'a>) -> &'a () {
14+
&()
15+
}
16+
17+
fn main() {
18+
let a = CustomMarker(PhantomData);
19+
let b = method(a);
20+
let c = method(a);
21+
let _ = (b, c);
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#![feature(reborrow)]
2+
use std::ops::{CoerceShared, Reborrow};
3+
use std::marker::PhantomData;
4+
5+
#[derive(Debug)]
6+
struct CustomMarker<'a>(PhantomData<&'a ()>);
7+
impl<'a> Reborrow for CustomMarker<'a> {}
8+
#[derive(Debug, Clone, Copy)]
9+
struct CustomMarkerRef<'a>(PhantomData<&'a ()>);
10+
impl<'a> CoerceShared<CustomMarkerRef<'a>> for CustomMarker<'a> {}
11+
12+
13+
fn method<'a>(_a: CustomMarkerRef<'a>) -> &'a () {
14+
&()
15+
}
16+
17+
fn main() {
18+
let a = CustomMarker(PhantomData);
19+
let b = method(a);
20+
let c = method(a);
21+
let _ = (&a, b, c);
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#![feature(reborrow)]
2+
use std::ops::{CoerceShared, Reborrow};
3+
use std::marker::PhantomData;
4+
5+
#[derive(Debug)]
6+
struct CustomMarker<'a>(PhantomData<&'a ()>);
7+
impl<'a> Reborrow for CustomMarker<'a> {}
8+
#[derive(Debug, Clone, Copy)]
9+
struct CustomMarkerRef<'a>(PhantomData<&'a ()>);
10+
impl<'a> CoerceShared<CustomMarkerRef<'a>> for CustomMarker<'a> {}
11+
12+
13+
fn method<'a>(_a: CustomMarkerRef<'a>) -> &'a () {
14+
&()
15+
}
16+
17+
fn main() {
18+
let a = CustomMarker(PhantomData);
19+
let b = method(a);
20+
let c = method(a);
21+
let _ = (a, b, c);
22+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#![feature(reborrow)]
2+
use std::ops::{Reborrow};
3+
use std::marker::PhantomData;
4+
5+
#[derive(Debug)]
6+
struct CustomMarker<'a>(PhantomData<&'a ()>);
7+
impl<'a> Reborrow for CustomMarker<'a> {}
8+
9+
fn method<'a>(_a: CustomMarker<'a>) -> &'a () {
10+
&()
11+
}
12+
13+
fn main() {
14+
let a = CustomMarker(PhantomData);
15+
let b = method(a);
16+
let c = method(a);
17+
let _ = (b, c);
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#![feature(reborrow)]
2+
use std::ops::{Reborrow};
3+
use std::marker::PhantomData;
4+
5+
#[derive(Debug)]
6+
struct CustomMarker<'a>(PhantomData<&'a ()>);
7+
impl<'a> Reborrow for CustomMarker<'a> {}
8+
9+
fn method<'a>(_a: CustomMarker<'a>) -> &'a () {
10+
&()
11+
}
12+
13+
fn main() {
14+
let a = CustomMarker(PhantomData);
15+
let b = method(a);
16+
let _ = (a, b); //~ERROR cannot move out of `a` because it is borrowed
17+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#![feature(reborrow)]
2+
use std::ops::{Reborrow};
3+
use std::marker::PhantomData;
4+
5+
#[derive(Debug)]
6+
struct CustomMarker<'a>(PhantomData<&'a ()>);
7+
impl<'a> Reborrow for CustomMarker<'a> {}
8+
9+
fn method<'a>(_a: CustomMarker<'a>) -> &'a () {
10+
&()
11+
}
12+
13+
fn main() {
14+
let a = CustomMarker(PhantomData);
15+
let b = method(a);
16+
let _ = method(a);
17+
let _ = (a, b);
18+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#![feature(reborrow)]
2+
use std::ops::{Reborrow};
3+
use std::marker::PhantomData;
4+
5+
#[derive(Debug)]
6+
struct CustomMarker<'a>(PhantomData<&'a ()>);
7+
impl<'a> Reborrow for CustomMarker<'a> {}
8+
9+
fn method<'a>(_a: CustomMarker<'a>) -> &'a () {
10+
&()
11+
}
12+
13+
fn main() {
14+
let a = CustomMarker(PhantomData);
15+
let _ = method(a);
16+
let b = method(a);
17+
let _ = (a, b);
18+
}

tests/ui/reborrow/custom_mut_coerce_shared.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,9 @@ impl<'a, T> Clone for CustomRef<'a, T> {
1414
}
1515
impl<'a, T> Copy for CustomRef<'a, T> {}
1616

17-
fn method(a: CustomRef<'_, ()>) {} //~NOTE function defined here
17+
fn method(a: CustomRef<'_, ()>) {}
1818

1919
fn main() {
2020
let a = CustomMut(&mut ());
2121
method(a);
22-
//~^ ERROR mismatched types
23-
//~| NOTE expected `CustomRef<'_, ()>`, found `CustomMut<'_, ()>`
24-
//~| NOTE arguments to this function are incorrect
25-
//~| NOTE expected struct `CustomRef<'_, ()>`
2622
}

0 commit comments

Comments
 (0)