Skip to content

Commit

Permalink
add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ChrisPardy committed Jan 26, 2021
1 parent b8115b8 commit cf71d83
Show file tree
Hide file tree
Showing 4 changed files with 195 additions and 0 deletions.
35 changes: 35 additions & 0 deletions src/test/ui/closures/2229_closure_analysis/capture-analysis-3.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#![feature(capture_disjoint_fields)]
//~^ WARNING: the feature `capture_disjoint_fields` is incomplete
//~| NOTE: `#[warn(incomplete_features)]` on by default
//~| NOTE: see issue #53488 <https://github.com/rust-lang/rust/issues/53488>
#![feature(rustc_attrs)]

#[derive(Debug)]
struct Child {
c: String,
d: String,
}

#[derive(Debug)]
struct Parent {
b: Child,
}

fn main() {
let mut a = Parent { b: Child {c: String::new(), d: String::new()} };

let c = #[rustc_capture_analysis]
//~^ ERROR: attributes on expressions are experimental
//~| NOTE: see issue #15701 <https://github.com/rust-lang/rust/issues/15701>
|| {
//~^ First Pass analysis includes:
//~| Min Capture analysis includes:
let _x = a.b.c;
//~^ NOTE: Capturing a[(0, 0),(0, 0)] -> ByValue
//~| NOTE: a[(0, 0)] captured as ByValue here
println!("{:?}", a.b);
//~^ NOTE: Capturing a[(0, 0)] -> ImmBorrow
//~| NOTE: Min Capture a[(0, 0)] -> ByValue
//~| NOTE: a[(0, 0)] used here
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
error[E0658]: attributes on expressions are experimental
--> $DIR/capture-analysis-3.rs:21:13
|
LL | let c = #[rustc_capture_analysis]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #15701 <https://github.com/rust-lang/rust/issues/15701> for more information
= help: add `#![feature(stmt_expr_attributes)]` to the crate attributes to enable

warning: the feature `capture_disjoint_fields` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/capture-analysis-3.rs:1:12
|
LL | #![feature(capture_disjoint_fields)]
| ^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default
= note: see issue #53488 <https://github.com/rust-lang/rust/issues/53488> for more information

error: First Pass analysis includes:
--> $DIR/capture-analysis-3.rs:24:5
|
LL | / || {
LL | |
LL | |
LL | | let _x = a.b.c;
... |
LL | |
LL | | };
| |_____^
|
note: Capturing a[(0, 0),(0, 0)] -> ByValue
--> $DIR/capture-analysis-3.rs:27:18
|
LL | let _x = a.b.c;
| ^^^^^
note: Capturing a[(0, 0)] -> ImmBorrow
--> $DIR/capture-analysis-3.rs:30:26
|
LL | println!("{:?}", a.b);
| ^^^

error: Min Capture analysis includes:
--> $DIR/capture-analysis-3.rs:24:5
|
LL | / || {
LL | |
LL | |
LL | | let _x = a.b.c;
... |
LL | |
LL | | };
| |_____^
|
note: Min Capture a[(0, 0)] -> ByValue
--> $DIR/capture-analysis-3.rs:27:18
|
LL | let _x = a.b.c;
| ^^^^^ a[(0, 0)] captured as ByValue here
...
LL | println!("{:?}", a.b);
| ^^^ a[(0, 0)] used here

error: aborting due to 3 previous errors; 1 warning emitted

For more information about this error, try `rustc --explain E0658`.
33 changes: 33 additions & 0 deletions src/test/ui/closures/2229_closure_analysis/capture-analysis-4.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#![feature(capture_disjoint_fields)]
//~^ WARNING: the feature `capture_disjoint_fields` is incomplete
//~| NOTE: `#[warn(incomplete_features)]` on by default
//~| NOTE: see issue #53488 <https://github.com/rust-lang/rust/issues/53488>
#![feature(rustc_attrs)]

#[derive(Debug)]
struct Child {
c: String,
d: String,
}

#[derive(Debug)]
struct Parent {
b: Child,
}

fn main() {
let mut a = Parent { b: Child {c: String::new(), d: String::new()} };

let c = #[rustc_capture_analysis]
//~^ ERROR: attributes on expressions are experimental
//~| NOTE: see issue #15701 <https://github.com/rust-lang/rust/issues/15701>
|| {
//~^ First Pass analysis includes:
//~| Min Capture analysis includes:
let _x = a.b;
//~^ NOTE: Capturing a[(0, 0)] -> ByValue
//~| NOTE: Min Capture a[(0, 0)] -> ByValue
println!("{:?}", a.b.c);
//~^ NOTE: Capturing a[(0, 0),(0, 0)] -> ImmBorrow
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
error[E0658]: attributes on expressions are experimental
--> $DIR/capture-analysis-4.rs:21:13
|
LL | let c = #[rustc_capture_analysis]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #15701 <https://github.com/rust-lang/rust/issues/15701> for more information
= help: add `#![feature(stmt_expr_attributes)]` to the crate attributes to enable

warning: the feature `capture_disjoint_fields` is incomplete and may not be safe to use and/or cause compiler crashes
--> $DIR/capture-analysis-4.rs:1:12
|
LL | #![feature(capture_disjoint_fields)]
| ^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(incomplete_features)]` on by default
= note: see issue #53488 <https://github.com/rust-lang/rust/issues/53488> for more information

error: First Pass analysis includes:
--> $DIR/capture-analysis-4.rs:24:5
|
LL | / || {
LL | |
LL | |
LL | | let _x = a.b;
... |
LL | |
LL | | };
| |_____^
|
note: Capturing a[(0, 0)] -> ByValue
--> $DIR/capture-analysis-4.rs:27:18
|
LL | let _x = a.b;
| ^^^
note: Capturing a[(0, 0),(0, 0)] -> ImmBorrow
--> $DIR/capture-analysis-4.rs:30:26
|
LL | println!("{:?}", a.b.c);
| ^^^^^

error: Min Capture analysis includes:
--> $DIR/capture-analysis-4.rs:24:5
|
LL | / || {
LL | |
LL | |
LL | | let _x = a.b;
... |
LL | |
LL | | };
| |_____^
|
note: Min Capture a[(0, 0)] -> ByValue
--> $DIR/capture-analysis-4.rs:27:18
|
LL | let _x = a.b;
| ^^^

error: aborting due to 3 previous errors; 1 warning emitted

For more information about this error, try `rustc --explain E0658`.

0 comments on commit cf71d83

Please sign in to comment.