Skip to content

Commit 9af1888

Browse files
committed
More test cases for tracked_fn_return_ref
1 parent d9afdc9 commit 9af1888

File tree

4 files changed

+71
-4
lines changed

4 files changed

+71
-4
lines changed

tests/compile-fail/get-set-on-private-input-field.stderr

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,11 @@ error[E0624]: method `set_field` is private
1515
...
1616
15 | input.set_field(&mut db).to(23);
1717
| ^^^^^^^^^ private method
18+
19+
warning: unused import: `salsa::prelude`
20+
--> tests/compile-fail/get-set-on-private-input-field.rs:1:5
21+
|
22+
1 | use salsa::prelude::*;
23+
| ^^^^^^^^^^^^^^
24+
|
25+
= note: `#[warn(unused_imports)]` on by default

tests/compile-fail/tracked_fn_return_ref.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,24 @@ fn tracked_fn_return_struct_containing_ref<'db>(
2626
}
2727
}
2828

29+
#[salsa::tracked]
30+
fn tracked_fn_return_struct_containing_ref_elided_implicit<'db>(
31+
db: &'db dyn Db,
32+
input: MyInput,
33+
) -> ContainsRef {
34+
ContainsRef {
35+
text: input.text(db),
36+
}
37+
}
38+
39+
#[salsa::tracked]
40+
fn tracked_fn_return_struct_containing_ref_elided_explicit<'db>(
41+
db: &'db dyn Db,
42+
input: MyInput,
43+
) -> ContainsRef<'_> {
44+
ContainsRef {
45+
text: input.text(db),
46+
}
47+
}
48+
2949
fn main() {}

tests/compile-fail/tracked_fn_return_ref.stderr

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,34 @@
1+
error[E0106]: missing lifetime specifier
2+
--> tests/compile-fail/tracked_fn_return_ref.rs:33:6
3+
|
4+
33 | ) -> ContainsRef {
5+
| ^^^^^^^^^^^ expected named lifetime parameter
6+
|
7+
help: consider using the `'db` lifetime
8+
|
9+
33 | ) -> ContainsRef<'db> {
10+
| +++++
11+
12+
warning: elided lifetime has a name
13+
--> tests/compile-fail/tracked_fn_return_ref.rs:33:6
14+
|
15+
30 | fn tracked_fn_return_struct_containing_ref_elided_implicit<'db>(
16+
| --- lifetime `'db` declared here
17+
...
18+
33 | ) -> ContainsRef {
19+
| ^^^^^^^^^^^ this elided lifetime gets resolved as `'db`
20+
|
21+
= note: `#[warn(elided_named_lifetimes)]` on by default
22+
23+
warning: elided lifetime has a name
24+
--> tests/compile-fail/tracked_fn_return_ref.rs:43:18
25+
|
26+
40 | fn tracked_fn_return_struct_containing_ref_elided_explicit<'db>(
27+
| --- lifetime `'db` declared here
28+
...
29+
43 | ) -> ContainsRef<'_> {
30+
| ^^ this elided lifetime gets resolved as `'db`
31+
132
error: lifetime may not live long enough
233
--> tests/compile-fail/tracked_fn_return_ref.rs:15:67
334
|
@@ -12,3 +43,12 @@ error: lifetime may not live long enough
1243
...
1344
23 | ) -> ContainsRef<'db> {
1445
| ^^^^^^^^^^^ requires that `'db` must outlive `'static`
46+
47+
error: lifetime may not live long enough
48+
--> tests/compile-fail/tracked_fn_return_ref.rs:43:6
49+
|
50+
40 | fn tracked_fn_return_struct_containing_ref_elided_explicit<'db>(
51+
| --- lifetime `'db` defined here
52+
...
53+
43 | ) -> ContainsRef<'_> {
54+
| ^^^^^^^^^^^ requires that `'db` must outlive `'static`

tests/compile-fail/tracked_impl_incompatibles.stderr

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,10 @@ error[E0117]: only traits defined in the current crate can be implemented for ar
114114
|
115115
47 | impl<'db> std::default::Default for [MyTracked<'db>; 12] {
116116
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--------------------
117-
| |
118-
| this is not defined in the current crate because arrays are always foreign
117+
| | |
118+
| | this is not defined in the current crate because arrays are always foreign
119+
| impl doesn't use only types from inside the current crate
119120
|
120-
= note: impl doesn't have any local type before any uncovered type parameters
121-
= note: for more information see https://doc.rust-lang.org/reference/items/implementations.html#orphan-rules
122121
= note: define and implement a trait or new type instead
123122

124123
error[E0308]: mismatched types

0 commit comments

Comments
 (0)